刚刚开始使用Powershell,我遇到了障碍。我试图迭代AD并获得所有OU的列表。从那里我试图获取每个OU中每个用户的用户帐户信息。要测试我已经能够获取所有OU的DN并输出到控制台,但是当我尝试将这些值传递给get-aduser cmdlt时,它会失败。
这是我的代码:
import-module activedirectory
$SearchBase = get-adorganizationalunit -filter * -searchbase "ou=users,ou=myUsers,dc=company,dc=local" -Properties CanonicalName | select-object -Property distinguishedName
foreach ($ou in $SearchBase) {
get-aduser -filter * -searchbase $ou -Properties givenName,sn,mail
}
我收到以下错误消息:"提供的distinguishedName必须属于以下分区之一..."
我认为问题在于,当将$ ou传递给get-aduser cmdlt时,在-searchbase正确之后,必须将可分辨名称括在引号中?如果是这样,不知道如何去做。任何帮助表示赞赏。
答案 0 :(得分:1)
您遇到的问题是您需要扩展您选择的属性。你会注意到你运行:
get-adorganizationalunit -filter * -searchbase "ou=users,ou=myUsers,dc=company,dc=local" -Properties CanonicalName | select-object -Property distinguishedName
它将显示父属性:
有两种解决方法:
在select语句中展开属性:
$SearchBase = get-adorganizationalunit -filter * -searchbase "ou=users,ou=myUsers,dc=company,dc=local" -Properties CanonicalName | select-object -ExpandProperty distinguishedName
或在foreach
:
foreach ($ou in $SearchBase) {
get-aduser -filter * -searchbase $ou.distinguishedName -Properties givenName,sn,mail
}