1 (изменено: ElCooper, 2016-01-16 16:19:19)

Тема: JS: Разница в отображении объектов AD в VBS и JS

Получим объект AD.

Например, obj=GetObject("CN=Builtin"+Вашдомен)

Теперь функция VBS  ListADObj(obj) покажет вложенные контейнеры (Account Operators, Administrators ...)


Function ListADObj(ou)
Dim obj 
For Each obj In ou
    WScript.Echo obj.name
Next
End Function

Аналогичная функция JS не показывает ничего



function ListADObj(xObj)  {
for (var item in xObj) { WScript.Echo(item.name); }
}


Замена на xObj[item] ничего не дает. Собственно, вообще в цикл не входит.

Что так?

2

Re: JS: Разница в отображении объектов AD в VBS и JS

mozers, вынужден удалить ваше сообщение.
ElCooper, ознакомьтесь с этой темой, отредактируйте свой пост.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: JS: Разница в отображении объектов AD в VBS и JS

ElCooper
1. Ваш пример, без указания провайдера в строке подключения, не будет работать ни в VBS ни в JS.
2. Элемент ADSI, возвращаемый данной процедурой, представляет собой
- не обычный объект JS, который можно перебрать с помощью for (var item in Obj)
- и не массив, доступ к элементам которого осуществляется через квадратные скобки xObj[item]
- это - коллекция, которую можно перебрать только используя объект Enumerator

Таким образом, рабочий код твоего примера будет выглядеть как то так:

var obj = GetObject("LDAP://domain");
ListADObj(obj);

function ListADObj(xObj) {
	var enumItems = new Enumerator(obj);
	for (; !enumItems.atEnd(); enumItems.moveNext()) {
		WScript.Echo(enumItems.item().Name);
	}
}

4 (изменено: ElCooper, 2016-01-18 14:08:00)

Re: JS: Разница в отображении объектов AD в VBS и JS

mozers, спасибо, протупил.

Что касается "без указания провайдера",  это понятно. Просто я, обычно, использую универсальную обертку для получения объекта, чтобы не думать, в каком виде он запрашивается.