Powershell通过Wild Card传递变量到过滤器

时间:2013-10-04 01:13:44

标签: powershell filter active-directory

我在这个问题上遇到了困难,我知道它可能是一个简单的语法问题。我不知道如何将这个变量传递给代码块并让它正确识别。

$user = "Some.Person"

这正如我所料。

get-aduser -filter {(Samaccountname -eq $user)}

这不是

get-aduser -filter {(userprincipalname -like $user*)}

尝试使用"$user*""'$user*'"以及其他一些变种无效。

最终结果将使用如下,因为我们有AD帐户,其中UPN与UserName不同,我有一个完整的用户名格式值列表,我需要确认仍存在活动帐户。

Get-ADUser -Filter {(UserPrincipalName -like "$user*") -or (SamAccountName -eq "$user")} -SearchBase "" -Server "MyServer:3268"

1 个答案:

答案 0 :(得分:1)

奇怪的行为,这不是答案,而是一个转折点; personnaly,我使​​用-LDAPFilter

Get-ADUser -LDAPFilter "(userprincipalname=$user*)"

过滤器的波兰表示法在开头有点令人不安,但在这里,这是使用底层协议LDAP进行过滤的自然方式。

Get-ADUser -LDAPFilter "(|(userprincipalname=$user*)(samAccountName=$user))"

您可以在Search Filter Syntax中获得有关此语法的更多信息,您也可以在About_ActiveDirectory_Filter中获得相应的过滤器。


如果您真的想使用-Filter语法,可以执行以下操作(我不为此感到自豪):

$userstar = "$user*"
Get-ADUser -Filter {(userprincipalname -like $userstar) -or (samAccountName -like $user)}