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

use*_*814 2 sorting powershell powershell-5.0

我有一个AD的哈希表,包含用户名和服务帐户.我正在尝试查找所有服务帐户.所有用户名都由其首字母(如"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
Run Code Online (Sandbox Code Playgroud)

我已经尝试过使用-contains和-match但它似乎没有拉回我追求的东西:

$svcAcc = $lastSeen | where-object {$_.sName -like "s"}
Run Code Online (Sandbox Code Playgroud)

我是否必须为每个执行一个或者我刚搞砸了我的语法?我想也许我需要排序 - 对象,但必须有一个更简单的方法来拉出一些基本的东西.感谢任何有关它的建议.

提前致谢 :)

最好,皮特

mkl*_*nt0 7

-like操作上对RHS上的通配符模式匹配整个 LHS,所以-like "s"永远只能匹配是价值观完全一致的文字s.

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

$svcAcc = $lastSeen | where-object { $_.sName -like 's*' }
Run Code Online (Sandbox Code Playgroud)

除此之外:你的使用select *似乎是多余的; 同样,-eq $true并非严格必要,因此分配$lastSeen可以简化为:

$lastSeen = $usrArr | Where-Object sEnabled | Sort-Object -Unique -Property sName
Run Code Online (Sandbox Code Playgroud)

请注意,Where-Object sEnabled是短期的Where-Object { $_.sEnabled },这是一个简化的语法在PSv3推出,称为比较报表.