Назад | Перейти на главную страницу

Сценарий PowerShell для перебора всех пользователей в группе

Я использую Windows 7 Professional.

Я знаю, как получить список всех пользователей в группе:

$ou="User Groups"
$userADName="RRAS VPN SSL"
$userADPath="LDAP://proddc6.prod.root/CN="+$userADName+",OU="+$ou+",DC=prod,DC=root"
$user = [adsi] $userADPath
$user.Member

Я пробовал перебирать этот список, создавая [adsi] объект для каждого:

$ou="User Groups"
$userADName="RRAS VPN SSL"
$userADPath="LDAP://proddc6.prod.root/CN="+$userADName+",OU="+$ou+",DC=prod,DC=root"
$user = [adsi] $userADPath
$user.Member| ForEach-Object {[adsi] ("ldap://proddc6.prod.root/" + $_)}

Я думал перебрать список объектов и получить адрес электронной почты и полное имя, а затем запустить некоторые команды, используя эту информацию. Вместо этого возникает ошибка:

The following exception occurred while retrieving member "PSComputerName": "Unknown error (0x80005000)"
    + CategoryInfo          : NotSpecified: (:) [format-default], ExtendedTypeSystemException
    + FullyQualifiedErrorId : CatchFromBaseGetMember,Microsoft.PowerShell.Commands.FormatDefaultCommand

Как я могу перебирать список пользователей в группе, обрабатывая адрес электронной почты и полное имя для каждого пользователя?

Вы получаете эту ошибку, потому что путь LDAP, который вы отправляете в цикл, неправильный. Вы трубите $user.Member к ForEach-Object, он отправляет всех пользователей, а не по одному.

Итак, вы отправляете что-то вроде:

ldap://proddc6.prod.root/CN=User1,CN=Users,DC=prod,DC=root CN=User2,CN=Users,DC=prod,DC=root

Я создал этот сценарий на основе вашего, он делает то, что вам нужно: взаимодействует с членами группы. Делайте с объектом что хотите $useradsi в петле.

$ou="User Groups"
$userADName="RRAS VPN SSL"
$objADSI = [adsi]””
$domain = $objADSI.distinguishedname
$userADPath="LDAP://CN="+$userADName+",OU="+$ou+",$domain"
$user = [adsi] $userADPath

foreach($child in $user.member) {
$useradsi = [adsi] "LDAP://$child"
}