我有一个包含用户名和服务帐户的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"}
我是否必须为每个执行一个或者我刚搞砸了我的语法? 我想也许我需要排序 - 对象,但必须有一个更简单的方法来拉出一些基本的东西。感谢任何有关它的建议。
提前致谢:)
最佳, 皮特
答案 0 :(得分:7)
-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 }
的缩写,class Foo {
private:
int a;
int b;
public:
Foo() :
a()
{}
};
是一种语法简化introduced in PSv3,称为比较语句。
答案 1 :(得分:3)
您可以像尝试一样使用-match
,但只需使用插入标记字符将查询转换为正则表达式。
$usrArr | Where-Object { $_.sName -match "^s" }