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 

我尝试遍历该列表,为每个对象创build一个[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 

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

你得到这个错误,因为你发送到循环的LDAPpath是不正确的。 您正在将$user.Member传递给ForEach-Object ,它将发送所有用户而不是一个一个。

所以你正在发送像这样的东西:

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

我创build了基于你的这个脚本,它做你所需要的:交stream一个组的成员。 用循环中的对象$useradsi做你想做的$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" }