lakshjoshi Ответов: 0

Через 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 & ")"
Конец, Если
Конец, Если
Конец, Если

Следующий
Конец Подводной Лодки

я использовал этот простой скрипт, который тоже потерпел неудачу.

0 Ответов