
したがって、このコマンドを実行すると:
Get-ADUser -Filter 'Name -like "*svc*"' | select Name, DistinguishedName
次のような結果が得られます。
SamAccountName DistinguishedName
-------------- -----------------
svc_myaccount CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com
DistinguishedName をフィルターして、最初の OU のみを提供するようにしたいと思います。OU フィールドの項目が「サービス アカウント」のみになることは想定していないことを付け加えておきます。結果は次のようになります。
SamAccountName DistinguishedName
-------------- -----------------
svc_myaccount OU=Service Accounts
Filter を使用してこれをワンライナーにしようとしましたが、うまくいきませんでした。コマンドを分割して、DistinguishedName を分割するコードを増やす必要があるかもしれません。これには簡単な解決策があるような気がしますが、私は複雑にしています。何かご意見やアイデアはありますか?
答え1
いい答えが見つかりましたここ.Get-ADUser
このSelect-Object
ステートメントにパイプします:
select Name,@{l='DistinguishedName';e={$_.DistinguishedName.split(',')[1].split('=')[1]}}
出力は次のようになります。
Name DistinguishedName
---- -----------------
svc_myaccount Service Accounts
答え2
フィルターは文字列を解析せず、要求したデータのみを返します。DN、グループ文字列、配列など、単一の文字列ではないものを取得する場合は、部分文字列または正規表現を使用して自分で解析する必要があります。
正規表現と分割を使用した1つのオプションは次のとおりです
# Parse the DN for the OU array list
Remove the CN and split
('CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com' -replace 'CN=[^=]*,') -split(',')
# Results
OU=Service Accounts
OU=me3
OU=me2
DC=me
DC=com
#Get just the first element of the above array - arrays are zero based
(('CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com' -replace 'CN=[^=]*,') -split(','))[0]
#Results
OU=Service Accounts
上記のアプローチを計算プロパティで使用する
# Pulling live from ADDS
Get-ADUser -Filter 'Name -like "*svc*"' |
Select-Object -Property Name,
@{Name='DistinguishedName';Expression = { (($_.DistinguishedName -replace 'CN=[^=]*,') -split(','))[0]}}
または、これを計算されたプロパティとして...
('CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com').split(',|=')[3]
... 分割時に or (2 つの分割された文字列間のパイプ) を使用します。これは .split でも機能する正規表現です。