Powershell使用通配符将变量传递到过滤器
我在这一点上有点困难,我知道这可能是一个简单的语法问题。我不知道如何将这个变量传递到代码块中并正确地确认它Powershell使用通配符将变量传递到过滤器,powershell,filter,active-directory,Powershell,Filter,Active Directory,我在这一点上有点困难,我知道这可能是一个简单的语法问题。我不知道如何将这个变量传递到代码块中并正确地确认它 $user = "Some.Person" 这是我所期望的 get-aduser -filter {(Samaccountname -eq $user)} 这是不可能的 get-aduser -filter {(userprincipalname -like $user*)} 尝试了“$user*”,“$user*”以及其他一些变体,但均无效 最终的结果将是使用如下,因为我们有广告帐
$user = "Some.Person"
这是我所期望的
get-aduser -filter {(Samaccountname -eq $user)}
这是不可能的
get-aduser -filter {(userprincipalname -like $user*)}
尝试了“$user*”
,“$user*”
以及其他一些变体,但均无效
最终的结果将是使用如下,因为我们有广告帐户,其中UPN是不同于用户名,我有一个用户名格式的值,我需要确认仍然存在与活动帐户的完整列表
Get-ADUser -Filter {(UserPrincipalName -like "$user*") -or (SamAccountName -eq "$user")} -SearchBase "" -Server "MyServer:3268"
奇怪的行为,这不是答案,而是一种自大;个人而言,我使用
-LDAPFilter
:
Get-ADUser -LDAPFilter "(userprincipalname=$user*)"
过滤器的波兰符号一开始有点令人不安,但在这里,它是使用底层协议LDAP进行过滤的自然方式
Get-ADUser -LDAPFilter "(|(userprincipalname=$user*)(samAccountName=$user))"
您可以在中获得有关此语法的更多信息,也可以在中获得相应的筛选器
如果您真的想使用
-Filter
语法,可以执行以下操作(我并不为此感到自豪):
这是否有效:
getaduser-filter{userprincipalname-like“$user*”}
@keithhill-negative。。。。没有任何类型的错误或警告,只有空结果。用文本替换变量效果很好。此cmdlet不在ActiveDirectory模块中,并且帮助参考似乎没有对使用通配符传递变量提供任何帮助。我将尝试ldap筛选器方法。看起来很标准。你知道一个比另一个更有效率吗?我不是在处理大量的用户帐户查询,只是好奇而已。据我所知,LDAP筛选器与PowerShell筛选器一样高效,只是因为我非常确定PowerShell筛选器已转换为标记为答案的LDAP筛选器(即本机ptotocle),这两种方法都有效,我将坚持使用LDAPFilter方法。多谢!另一方面。不知道为什么,但当使用-LDAPFilter
并使用不返回命中的值进行查询时,我会得到一个空对象,而使用-Filter
时,我会得到空白,这也是一个解决问题的挑战。
$userstar = "$user*"
Get-ADUser -Filter {(userprincipalname -like $userstar) -or (samAccountName -like $user)}