Список объектов в OU с определенной группой безопасности

В настоящее время я использую сценарий для отображения всех компьютеров, назначенных группе безопасности. В настоящее время я использую сценарий VB:

Set objGroup = GetObject("LDAP://cn=My Group,ou=Security Groups,ou=_Groups - standard,ou=city,ou=state,dc=my,dc=domain,dc=tld,")
For Each objMember in objGroup.Members
Wscript.Echo objMember.Name 
Next

Этот скрипт работает и извлекает каждого члена моей группы со всего домена. Это работает, но я пытаюсь немного его отфильтровать. Я хочу искать компьютеры через определенное подразделение. Я безрезультатно пробовал следующий код:

Dim objGroup
Dim objMachine
Dim objMatch

Set objGroup = GetObject("LDAP://cn=My Group,ou=Security Groups,ou=_Groups - standard,ou=city,ou=state,dc=my,dc=domain,dc=tld")
Set objMachine = GetObject("LDAP://ou=Building,ou=street,ou=city,ou=state,dc=my,dc=domain,dc=tld")

Dim c
For each c in objGroup
if c = objMachine Then
Wscript.Echo objMachine.Name
end if
next

Код выполняется без ошибок, но я не вижу никаких результатов. Затем я решил решить эту проблему в PowerShell.

$computer = Get-ADGroup -searchbase 'ou=Building,ou=street,ou=city,ou=state,dc=my,dc=domain,dc=tld' -Filter * ` |
Get-ADGroup -Filter {(Name -eq "My Group") -or (Name -eq "My Other Group")} ` |
Select-Object -Unique ` |
Sort-Object DistinguishedName; 
$computer | Select-Object Name, DistinguishedName; 
export-csv C:\Temp\Result.csv

Это вызывает несколько ошибок в ISE, указывающих, что командлет Get-ADGroup не поддерживает ввод конвейера или ввод не совпадает. В конце он перечисляет две группы, а также их отличительные названия.

Я хотел бы получить имя компьютера, а также отличительное имя для каждого компьютера, который является членом «Моя группа» или «Моя другая группа» в подразделении Building, а также в каждом подразделении в этом подразделении. Я бы предпочел сделать это в PowerShell, но я также могу использовать VB Script.

(Извините, если мне не хватает важной информации, это моя первая публикация.)


person Rikai    schedule 22.09.2015    source источник


Ответы (1)


Разбейте эту задачу на:

  1. Найти участников группы
  2. Определите, проживают ли они в OU

Найти участников группы легко с Get-ADGroupMember:

$Members = Get-ADGroupMember "SecurityGroup" 

Чтобы определить, находится ли член в OU, проверьте, совпадает ли различающееся имя OU с последней частью отличительного имени члена:

$OU = "OU=Specific,OU=Computers,OU=Office1,DC=domain,DC=tld"
$MembersInOu = $Members |Where-Object {$_.DistinguishedName -like "*,$OU"}

Теперь вы можете объединить это в один конвейер:

Get-ADGroupMember "SecurityGroup" |Where-Object {$_.DistinguishedName -like "*,$OU"}
person Mathias R. Jessen    schedule 22.09.2015
comment
По большей части это работает достаточно хорошо. Когда я пытаюсь сделать это в большой группе, я просто сталкиваюсь со следующей ошибкой: FullyQualifiedErrorId : The size limit for this request was exceeded,Microsoft.ActiveDirectory.Management.Commands.GetADGroupMember и я не знаю, как еще разобрать ее. - person Rikai; 22.09.2015