我正在运行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" }