web-dev-qa-db-ja.com

PowershellのGet-ADOrganizationUnitとGet-ADComputerを使用してOU名を抽出する

Active Directory上のサーバーのリストを取得したいのですが、それらのIP、OS、およびそれらが属する組織単位も含めたいです。サーバーが所属する直接の親OUです。

私は次のPSスクリプトを思い付きました、そしてそれは私が必要とするものをほぼ満足させます:


> Get-ADComputer -filter * -Properties ipv4Address, OperatingSystem,DistinguishedName | select-object Name, ipv4Address, OperatingSystem, DistinguishedName

ただし、OU名は実際にはDistinguishedNameであり、わかりにくいので、本当に必要なのは、その識別名の2番目のOU値です。フルネームではなく、黄色のボックスに値のみを表示したい。

enter image description here

Get-ADOrganizationUnitを使用しようとしましたが、常に空白になります。これが私の最新の試みです。私のPSスクリプトに何か問題があるかどうかを見つけることができますか?

> Get-ADComputer -filter * -Properties ipv4Address, OperatingSystem,DistinguishedName | select-object Name, ipv4Address, OperatingSystem, @{label='DistinguishedName';expression={(Get-ADOrganizationUnit $_.DistinguishedName -Property DistinguishedName).Name}}

2
Fylix

文字列操作はあなたの友達です。

仮定:

$dn = "CN=ComputerName,OU=OU1,OU=OU2,OU=OU3,DC=domain,DC=org"

次に:

$OU = $dn.Split(',')[1].Split('=')[1]

これは何をしますか:

  • それぞれの「、」で「dn」文字列を分割します
  • 2番目の要素( "OU = OU1")を取る
  • これを「=」ごとに分割する
  • 2番目の要素を取る
  • 結果を変数「$ OU」に割り当てます

最後に、変数$ OUには、オブジェクトが含まれているパスの最初のOUの名前( "OU1")が含まれています。

そしてはい、あなたはあなたの出力をフォーマットするときにこれを使うこともできます:

Get-ADComputer -filter * -Properties ipv4Address, OperatingSystem,DistinguishedName | select-object Name, ipv4Address, OperatingSystem, @{label='OU';expression={$_.DistinguishedName.Split(',')[1].Split('=')[1]}}
3
Massimo