【问题标题】:Get-ADUser -filter parsingGet-ADUser -filter 解析
【发布时间】:2017-08-29 10:33:46
【问题描述】:

我正在运行一个脚本,该脚本从 SAP 提取中获取一个人的名字和姓氏,并读取 AD 以获取他们的 UPN。对于大多数人来说,这是可行的;但是,有很多用户的名字是个问题。例如,SAP 中的“Philip Davies”(为了保护无辜而改名)在 AD 中是“Phil Davies”。所以:我使用了以下命令并且它有效:

代码:

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" 方法或告诉我如何解析和通配符来帮助我吗?

谢谢

【问题讨论】:

  • 在过滤器脚本块外尝试$fna="Phi*"
  • 遗憾的是,如果我这样做,它会将星号解析为字符串的一部分,而不是作为通配符。对不起,我忘了把这个添加到我的帖子中。
  • 记得在过滤器块内仍然使用-like $fna

标签: powershell parsing filter wildcard


【解决方案1】:

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

$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))"

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2018-07-05
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多