Get-ADUser -filter解析

时间:2017-08-29 10:33:47

标签: powershell parsing filter wildcard

我正在运行一个脚本,该脚本从SAP提取中获取一个人的名字和姓氏,并读取AD以获取他们的UPN。对大多数人来说,这是有效的;但是有一堆用户的名字是个问题。例如" Philip Davies" (SAP改名以保护无辜的名字)是菲尔戴维斯"在广告中。所以:我使用了以下命令,它可以工作:

代码:

Get-ADUser -SearchBase "OU=CBC Users,DC=cbc,DC=int" -Filter {GivenName -eq "Phil" -and Surname -eq "Davies"}

然后我意识到我可以检查前三个字符,这些字符在简约名称中通常是相同的......所以我这样做也有效:

代码:

Get-ADUser -SearchBase "OU=CBC Users,DC=cbc,DC=int" -Filter {GivenName -like "Phi*" -and Surname -eq "Davies"}

下一步:变量;所以我试试这个并且它有效:

代码:

$fna="Phil"
Get-ADUser -SearchBase "OU=CBC Users,DC=cbc,DC=int" -Filter {GivenName -eq $fna -and Surname -eq "Davies"}

但如果我试试这个:

代码:

$fna="Philip"
$fna=$fna.Substring(0,3)
Get-ADUser -SearchBase "OU=CBC Users,DC=cbc,DC=int" -Filter {GivenName -like $fna* -and Surname -eq "Davies"}

我没有结果。如果我使用括号,双引号,单引号,任何东西都没关系。一旦我尝试解析变量并使用通配符,它​​就会产生错误消息或没有结果。

任何人都可以通过使用" -ldapfilter" 方法或告诉我如何解析AND通配符来帮助我?

由于

1 个答案:

答案 0 :(得分:0)

您不应将通配符与变量一起使用,因为您希望使用名称作为字符串进行检查。所以你可以做的是直接用通配符包装字符串并将最终的东西存储在一个变量中:

$fna="Philip"
$fna="$($fna.Substring(0,3))*"

Get-ADUser -SearchBase "OU=CBC Users,DC=cbc,DC=int" -Filter {GivenName -like $fna -and Surname -eq "Davies"}

或者您可以直接使用LDAP过滤器:

Get-ADUser -SearchBase "OU=CBC Users,DC=cbc,DC=int" -LDAPFilter "(&(GivenName=$fna)(Sn=Davies))"

希望它有所帮助。