我有一个来自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
我已经尝试过使用-contains和-match,但是它似乎并没有收回我的追求:
$svcAcc = $lastSeen | where-object {$_.sName -like "s"}
我是否必须为每一个执行一个操作,还是只是弄乱了我的语法?
我在想,也许我需要对对象进行排序,但是必须有一种更简单的方法来提取如此基本的内容。感谢任何建议。
提前致谢 :)
最好,
皮特
最佳答案
-like
运算符将RHS上的通配符模式与整个LHS进行匹配,因此-like "s"
将只匹配与文字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 sEnabled
是Where-Object { $_.sEnabled }
的缩写,它是一种语法简化introduced in PSv3,称为比较语句。关于sorting - 在以 'n'开头的数组中查找用户名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42637404/