在以 'n' 开头的数组中查找用户名

Find username in array beginning with 'n'

我有一个来自 AD 的散列 table,其中包含用户名和服务帐户。我正在尝试查找所有服务帐户。所有用户名都由首字母唯一标识,例如 'r' 和服务帐户 's'。例如:r398831 和 s882443。这是我拥有的数组的示例:

  $null = $usrArr.Add([pscustomobject] @{
    sName = $user.name
    sGivenName = $user.GivenName
    sSurname = $user.Surname
    sEnabled = $user.Enabled
   })

$lastSeen = $usrArr | select * | Where {$_.sEnabled -eq $true}
$lastSeen = $lastSeen | Sort-Object -Unique -Property sName

我试过使用 -contains 和 -match,但它似乎并没有拉回我所追求的:

$svcAcc = $lastSeen | where-object {$_.sName -like "s"}

我是否必须为每个执行一个,或者我只是弄乱了我的语法? 我在想也许我需要对对象进行排序,但必须有一种更简单的方法来完成如此基本的事情。感谢对此的任何建议。

提前致谢:)

最好的, 皮特

-like 运算符将 RHS 上的通配符模式与 整个 LHS 进行匹配,因此 -like "s" 只会匹配 [=31] 的值=]完整 等同于文字 s.

要改为匹配 文字 s 开头的输入,请使用通配符模式 s*:

$svcAcc = $lastSeen | where-object { $_.sName -like 's*' }

顺便说一句:您对 select * 的使用似乎是多余的;同样,-eq $true 也不是绝对必要的,因此分配给 $lastSeen 可以简化为:

$lastSeen = $usrArr | Where-Object sEnabled | Sort-Object -Unique -Property sName

注意Where-Object sEnabledWhere-Object { $_.sEnabled }的缩写,是语法的简化introduced in PSv3,叫做比较语句.

您可以像您尝试的那样使用 -match,但只需使用插入符号定位字符将您的查询转换为正则表达式。

$usrArr | Where-Object { $_.sName -match "^s" }