![PowerShell 脚本循环遍历组中的所有用户](https://linux22.com/image/564418/PowerShell%20%E8%84%9A%E6%9C%AC%E5%BE%AA%E7%8E%AF%E9%81%8D%E5%8E%86%E7%BB%84%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E7%94%A8%E6%88%B7.png)
我正在运行 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.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"
}