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

时间:2017-03-06 23:18:42

标签: sorting powershell powershell-v5.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

我尝试过使用-contains和-match但它似乎没有取消我追求的内容:

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

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

提前致谢:)

最佳, 皮特

2 个答案:

答案 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 sEnabledWhere-Object { $_.sEnabled }的缩写,class Foo { private: int a; int b; public: Foo() : a() {} }; 是一种语法简化introduced in PSv3,称为比较语句

答案 1 :(得分:3)

您可以像尝试一样使用-match,但只需使用插入标记字符将查询转换为正则表达式。

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