2017-03-06 6 views
2

ユーザ名とサービスアカウントを含むADのハッシュテーブルがあります。私はすべてのサービスアカウントを見つけようとしています。すべてのユーザー名は、 'r'などの最初の文字と 's'のサービスアカウントによって一意に識別されます。例:r398831およびs882443。ここでは、配列の例です。私が持っている:ユーザ名を 'n'で始まる配列で検索します。

$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"} 

ドIそれぞれのために実行する必要がありますか私はちょうどこれに構文を台無しにした? 私はオブジェクトをソートする必要があるかもしれないと思っていますが、基本的なものを取り除くより簡単な方法が必要です。それについてのアドバイスを感謝します。事前に

感謝:)

ベスト、 ピート

答えて

7

-likeオペレータはとても-like "s"がしかフルでである値に一致し、全体 LHSに対してRHS上のワイルドカードパターンに一致しますは、リテラルsと同じです。余談として

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

ではなく、ワイルドカードパターン​​を使用し、リテラルsで始まる入力を一致させるためにselect *のご使用は冗長と思われます。 Where-Object sEnabled比較文のと呼ばれる構文の簡素化introduced in PSv3、である、Where-Object { $_.sEnabled }の略であることを

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

注:同様に、-eq $trueはそうのように簡略化することができ$lastSeenに割り当てる、厳密には必要ではありません。

+1

ありがとうございます。完璧に動作します。私が少しコピーし貼っていたコードを謝り、 – user1894814

3

キャッチアンカー文字を使用して、クエリを正規表現に変換するだけです。-matchを使用できます。

$usrArr | Where-Object { $_.sName -match "^s" } 
関連する問題