Get-ADUser什么都不返回

时间:2015-08-12 09:01:30

标签: powershell active-directory

我目前正在编写一个脚本,该脚本会提取存储在.csv文件中的某些名称,并应显示有关该用户的AD帐户的一些信息。

名称可以像han solosolo han一样存储,但始终按空格分隔。这些名字至少可以包含变音符号以及谁知道还有什么。

每个用户都有一个名为name的属性,它看起来像solo, han(基本上是"姓氏,名称为#34;)。

这是我目前正在使用的专栏:

Get-Content -Encoding:string C:\Temp\admin.mh\Reports\User_AD.csv |
select -skip 1 | 
ConvertFrom-Csv -Header "User" -Delimiter "," | %{
   $arr = $_.User.Split(" "); 
   Get-ADUser -Filter {(Name -eq "$($arr[1]), $($arr[0])") -or (Name -eq "$($arr[0]), $($arr[1])")} 
}

第一位是谷歌的某个地方,它表示这是获得正确编码的方法。

如果我手动输入名称(即使使用变音符号),我会得到正确的结果,但是当我将它存储在数组中时,我永远不会得到任何结果,即使根本没有特殊字符。

通过创建像$arr = @("han", "solo")这样的数组并使用完全相同的过滤器,我能够在命令行上重现这种确切的行为。如果我将变量保留并像name -eq "solo, han"那样手动过滤,一切正常。

1 个答案:

答案 0 :(得分:2)

Get-ADUser不支持脚本块过滤,而应使用基于字符串的过滤。但是,您可以在过滤器中使用-eq和其他比较运算符。此外,Get-ADUser要求字符串值用单引号括起来。所以你的过滤器应该是这样的:

Get-ADUser -Filter "(Name -eq '$($arr[1]), $($arr[0])') -or (Name -eq '$($arr[0]), $($arr[1])')"