将变量传递给get-aduser cmdlt时出现问题

时间:2018-05-09 19:51:01

标签: powershell active-directory

刚刚开始使用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正确之后,必须将可分辨名称括在引号中?如果是这样,不知道如何去做。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您遇到的问题是您需要扩展您选择的属性。你会注意到你运行:

get-adorganizationalunit -filter * -searchbase "ou=users,ou=myUsers,dc=company,dc=local" -Properties CanonicalName | select-object -Property distinguishedName

它将显示父属性:

enter image description here

有两种解决方法:

  1. 在select语句中展开属性:

    $SearchBase = get-adorganizationalunit -filter * -searchbase "ou=users,ou=myUsers,dc=company,dc=local" -Properties CanonicalName | select-object -ExpandProperty distinguishedName

  2. foreach

    中调用该媒体资源

    foreach ($ou in $SearchBase) { get-aduser -filter * -searchbase $ou.distinguishedName -Properties givenName,sn,mail }