-contains运算符在不应该运行时失败

时间:2015-08-02 20:26:05

标签: powershell csv active-directory

我正在编写一个脚本来创建新的AD用户并进行测试以确保找不到现有的displayname,因为New-ADUser如果找到则会失败。有人可以帮助我理解为什么我可能永远不会从以下数组列表中得到真正的结果吗?

$ExistingDNs= Get-ADUser -SearchBase 'OU=whateverOU' -Filter * -Property displayname | select displayname | Out-string

我的目标是加载OU中的所有现有displayname,然后将其与我读取CSV文件以创建displayname的方法进行比较,但我可以'似乎让它回归真实。

If ($ExistingDNs.DisplayName -contains $DisplayName) 

我被告知这应该可行,但是当我尝试查看数组时它是空的?只有$ExistingDSs在ISE中以可视方式向我显示列表,在那里我可以清楚地看到存在与我的CSV文件中相同的名称,但是找不到匹配并且永远不会返回为真,即使两者都是字符串值我相信。

1 个答案:

答案 0 :(得分:1)

我确定这是因为您正在使用select displayname来破坏$ExistingDNs将创建的对象数组。目前,当您真正需要字符串数组时,$ExistingDNs = Get-ADUser -SearchBase 'OU=whateverOU' -Filter * -Property displayname | select -ExpandProperty displayname 是换行符分隔的字符串。

-ExpandProperty

我们也使用If ($ExistingDNs -contains $DisplayName) ,所以你最终会得到一个字符串数组。这样你的条件语句可以简化为......

Connection