PowerShell 脚本循环遍历组中的所有用户

PowerShell 脚本循环遍历组中的所有用户

我正在运行 Windows 7 专业版。

我知道如何获取组中所有用户的列表:

$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

如何遍历组中的用户列表,处理每个用户的电子邮件地址和全名?

答案1

您收到此错误是因为您发送到循环的 LDAP 路径不正确。您正在通过管道发送$user.MemberForEach-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"
}

相关内容