OUに適用されているGPOの名前を取得したい。ただし、AD DSツールに頼らずに。


そんなの、gpmc.mscで見りゃいいじゃん。

いやいや、ADDSツール入れなくても見れた方が良いんです。
何よりテキストで取得できるメリットは盛り沢山。
差分比較やら、バックアップやら。

やり方

以下の通りPowerShellで取得できます。
スクリプトとして保存して、対象OUを引数に渡してあげられるようにすると、なお使い安いかも知れませんね。

powershell
# DirectorySearcherのインスタンスを生成します。
# これなら、対象OUのDNを知らなくても良いので。
$adsch = New-Object -TypeName DirectoryServices.DirectorySearcher

# 検索フィルタを設定
# "OU=WebServers"のように任意のフィルタを設定します。
$adsch.Filter = "OU=[対象OUの名前]"

# フィルタにヒットするオブジェクトを一つだけ引っ張ります。
# FindAllとforeachを使って、結果を一個ずつ処理するのもありでしょう。
$ou = $adsch.FindOne()

# ouに適用されたgpoのパスを一個ずつ処理します。(何故か配列になってないので、splitしてこねくり回します。)
$ou.Properties["gplink"][0] -split "¥]" | foreach {
  $temp = $_ -replace "¥[", ""
  $gpoentry = $temp.Split(";")
  $gpo = [adsi]$gpoentry[0]
  $gpo.displayName
}