Через ldap невозможно прочитать членов группы администраторов домена из windows server 2012 vbscript
пытаюсь прочитать членов группы администраторов домена через vbscript, но не могу прочитать.
выбрасывание ошибки на сервер пользователя.
объект не коллекция
но работа в моем локальном тесте windows server 2012:
пожалуйста любое предложение пожалуйста:
используя приведенный ниже скрипт
Что я уже пробовал:
Option Explicit 'Get all member of a group INCLUDING members from ALL NESTED groups. 'Simply call the script with the samAccountName of the group. 'If the group name contains spaces it should be ENCLOSED IN QUOTES, 'IE scriptName.vbs "DOMAIN ADMINS" Dim objGroup 'VERIFY A GROUP NAME WAS PASSED If wscript.arguments.count <> 1 Then wscript.echo "NO GROUP PASSED" wscript.echo "Usage: scriptName <groupSamAccountName>" wscript.quit End If 'BIND TO THE GORUP Set objGroup = getGroup(wscript.Arguments(0)) 'ENUMERATE THE GROUPS MEMBERS enumMembers objGroup, "" Function getGroup(strGroupName) Dim objConn, objRecSet, strQueryString, objRootDSE, strQueryFrom Const adsOpenStatic = 3 Set objRootDSE = GetObject("LDAP://RootDSE") strQueryFrom = "LDAP://" & objRootDSE.get("defaultNamingContext") Set objConn = wscript.CreateObject("ADODB.Connection") objConn.Provider = "ADsDSOObject" objConn.Open strQueryString = "SELECT AdsPath FROM '" & strQueryFrom & "' " & _ "WHERE samAccountName = '" & strGroupName & "'" Set objRecSet = wscript.CreateObject("ADODB.Recordset") objRecSet.Open strQueryString, objConn, adsOpenStatic If objRecSet.recordCount = 1 Then Set getGroup = GetObject(objRecSet("AdsPath")) Else wscript.echo ucase(strGroupName) & " was not found in the domain. _ (" & objRootDSE.get("defaultNamingContext") & ")" wscript.quit End If End Function Sub enumMembers(byRef objGroup, strInheritedFrom) Dim objMember For Each objMember In objGroup.Members If lcase(objMember.class) = "group" Then enumMembers objMember, objMember.samAccountName Else If objMember.displayname <> "" Then If strInheritedFrom = "" Then wscript.echo objMember.displayname Else wscript.echo objMember.displayname & " (From NESTED GROUP: " & _ strInheritedFrom & ")" End If Else If strInheritedFrom = "" Then wscript.echo objMember.samAccountName Else wscript.echo objMember.samAccountName & " (From NESTED GROUP: " & _ strInheritedFrom & ")" End If End If End If Next End Sub
CHill60
Вероятно, у вас нет разрешений на доступ к этой групповой информации
lakshjoshi
пользователь имеет права администратора домена.
[Отладка]{3} текущего пользователя пн-es491 имеет соответствующие права, да и ЕА.
[DEBUG]{3} ISCorrectRights True
а пользователь входит в группу администраторов домена
я проверил вот это
CHill60
Когда что - то работает на одном сервере, но не на другом, это обычно сводится к разрешениям-они также запускают ваш скрипт "от имени администратора"?
lakshjoshi
да:)
он открыл командную строку как администратор
и запустил сценарий.
и он запускает его с сервера участника.
и он способен дотянуться до домена.
и еще одна вещь-та же проблема со всеми серверами-членами.
lakshjoshi
Явный Параметр
- Получить всех членов группы, включая членов из всех вложенных групп.
- Просто вызовите скрипт с именем samAccountName группы.
'Если имя группы содержит пробелы, оно должно быть заключено в кавычки,
'IE scriptName.vbs "администраторы домена"
Dim objGroup
- УБЕДИТЕСЬ, ЧТО ИМЯ ГРУППЫ БЫЛО ПЕРЕДАНО
Если wscript.arguments.count <> 1, то
wscript.echo "ни одна группа не прошла"
wscript.echo "использование: scriptName <groupsamaccountname>"
объект WScript.бросить
Конец, Если
СВЯЗЫВАТЬ В ГРУППЫ
Set objGroup = getGroup(wscript.Аргументы(0))
- ПЕРЕЧИСЛИТЕ ЧЛЕНОВ ГРУПП
enumMembers objGroup, ""
Функция getGroup(strGroupName)
Dim objConn, objRecSet, strQueryString, objRootDSE, strQueryFrom
Const adsOpenStatic = 3
Set objRootDSE = GetObject("LDAP://RootDSE")
strQueryFrom = "LDAP://" & objRootDSE.get("defaultNamingContext")
Установите objConn = wscript.Функция createobject("adodb, хранящихся.Подключение")
objConn.Провайдер = "ADsDSOObject"
objConn.Открыть
strQueryString = "SELECT AdsPath FROM '" &strqueryfrom & "' " & _
"Где samAccountName = '" &strgroupname & "'"
Set objectset = wscript.Функция createobject("adodb, хранящихся.Записей")
objectset.Откройте strQueryString, objConn, adsOpenStatic
Если objectset.recordCount = 1, то
Set getGroup = GetObject(objectset("AdsPath"))
Еще
wscript.echo ucase(strGroupName) & " не был найден в домене. _
(" &амп; objRootDSE.вам("атрибута defaultnamingcontext") и усилитель; ")"
объект WScript.бросить
Конец, Если
Конечная Функция
Sub enumMembers(byRef objGroup, strInheritedFrom)
Дим objMember
Для каждого objMember в objGroup.Члены
Если lcase(objMember.class) = "группа", то
enumMembers objMember, objMember.samAccountName
Еще
Если objMember.отображаемое имя &ЛТ;&ГТ; "" тогда
Если strInheritedFrom = "", то
объект WScript.Эхо objMember.отображаемое имя
Еще
wscript.echo objMember.displayname & "(из вложенной группы: "& _
strInheritedFrom & ")"
Конец, Если
Еще
Если strInheritedFrom = "", то
объект WScript.Эхо objMember.закоксованного
Еще
объект WScript.Эхо objMember.имя учетной записи Sam &ампер; "(из вложенной группе: "и усилитель; _
strInheritedFrom & ")"
Конец, Если
Конец, Если
Конец, Если
Следующий
Конец Подводной Лодки
я использовал этот простой скрипт, который тоже потерпел неудачу.