在PowerShell的Where-Object中使用字符串数组进行比较

6

我有一个Active Directory的用户列表,我是这样检索到它的:

$users = Get-AdUser -Filter {(Enabled -eq "True" )} -Properties Description 

问题在于我有一组特定的用户,根据他们的描述分为以下几类:
  • 管理员
  • 秘书
  • 邮递员
我会创建这样的子列表:
$Admins = $users | Where-Object Description -eq 'Administrator'

然而问题是,没有标准化。创建用户的人可以写'Admin'或'Administrator'或'adm'等,这使得我的子列表不包含所有管理员用户。

我所做的是创建一个字符串数组:

$Admin_User_Strings = @("adm", "admin", "administrator")

我想在我的子列表中使用这个数组,但显然这样做不起作用:

$Admins = $users | Where-Object $Admin_User_Strings -contains Description 

我遇到了以下错误:

Where-Object : 找不到接受参数 'System.Object[]' 的位置参数。

因此,我的问题是,如何让下面这行代码正常运行:

$Admins = $users | Where-Object Description -eq 'Administrator'

接受更多“管理员”输入的方式吗?


2
Where-Object {$Admin_User_Strings -contains $_.Description} or Where-Object Description -in $Admin_User_Strings - Mathias R. Jessen
2
或者 Where-Object Description -like adm* - Mathias R. Jessen
没有人阻止你使用 "' :-) - Mathias R. Jessen
哦,好的,我之前不知道那个细节。非常感谢。 - Kahn Kah
1个回答

20

你有几个选项:

$users | Where-Object {$Admin_User_Strings -contains $_.Description}

或者:$users | Where-Object $_.Description -in $Admin_User_Strings

或者:$users | Where-Object $_.Description -match "adm|admin|administrator"


1
谢谢,-match选项会对我很有帮助。谢谢Mosh。 - Kahn Kah
-in 对我非常有效,谢谢! - Jeff Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接