【Active Directory】OUにリンクされていないGPOを調べる

Active Directory

【Active Directory】OUにリンクされていないGPOを調べる

2018年9月9日

こんにちは!SE ブログの相馬です。

 

 

 

今回は、Active Directory の GPO について、OU にリンクされていない GPO を調べる方法について書いてみました。

 

 

OU にリンクされている GPO を調べる方法は以下の記事にございます。

 

 

 

 

 

PC の構成を使いやすくしたり、制御したり、統一化したりするために多くの GPO を使っている組織であれば、かなりの量の GPO になってくるかと思います。私もよく GPO を作成しては PC に展開したりしていますが、かなり多いと把握していない GPO もあったりしますよね。

 

 

当然、使用されていない GPO は不要なのですが、どれが使用されていないか分からないという事もあるかと思います。その場合はどうやって調査するのでしょうか。

 

 

 

調査方法について

 

 

基本的に GPO は OU にリンクしないと機能しませんので、OU にリンクされているかどうかになると思います。

 

 

ただし、リンクされていなくても、今後使用する可能性がある GPO も中にはあるのかもしれませんが、これは人為的に確認するしかないと思います。

 

 

それではどうやって OU にリンクされていないか確認するのでしょうか。

 

 

 

OU にリンクされていない GPO を確認する(GUI)

 

 

サーバーマネージャーから [グループポリシーの管理] を起動します。

 

 

 

これは OU に GPO がリンクされている状態になります。

 

 

 

一方、これは OU に GPO がリンクされていない状態になります。

 

 

 

 

という事で、GUI で確認する方法についてはこれでできますが、大量の GPO がある場合はこれを一つ一つやっていくのはとても時間が無いし余りにも効率性に欠けると思います。ここは機械化してしまいましょう。

 

 

そこで PowerShell の登場です。PowerShell を使えば大量の GPO があっても OU にリンクされていない分を調査する事が可能です。

 

 

 

OU にリンクされていない GPO を確認する (PowerShell)

 

 

TechNet のスクリプトセンターに素晴らしいスクリプトがあったので使わせていただきました。データを整形、ファイル出力したりと一部追加したりしています。

 

 

Get Unlinked Group Policy Objects | TechNet スクリプトセンター

 

 

注意: 11 行目のコードの If(IsNotLinked( の後にカギカッコで xml を入れてください。(W0rdpress の問題でコードの一部が切り取られて表示されてしまう為。)

 

 

function IsNotLinked($xmldata){ 
    If ($xmldata.GPO.LinksTo -eq $null) { 
        Return $true 
    } 
     
    Return $false 
} 
 
$unlinkedGPOs = @() 
 
Get-GPO -All | ForEach { $gpo = $_ ; $_ | Get-GPOReport -ReportType xml | ForEach { If(IsNotLinked($_)){$unlinkedGPOs += $gpo} }} 
 
If ($unlinkedGPOs.Count -eq 0) { 
    "リンクされていないGPOはありません。" 
} 
Else{ 
    $result = $unlinkedGPOs | Select DisplayName,ID,CreationTime,ModificationTime
    $result | Export-Csv "C:\temp\unlinkedGPOs.txt" -NoTypeInformation -Encoding UTF8
}

 

 

 

上のスクリプトを実行し、エクスポートしたテキストファイルを開きましたところ、タブ区切りでデータが出力されていました。これで大量にあっても Excel にして管理する事ができるようになりました。

 

 

 

 

以上となります。いかがでしょうか。

 

 

これは便利ですね、GPO が増えるにつれ管理するのが大変なので、こういったスクリプトを使って手作業により手間を省き、効率的に管理できるのでとても良いと思います。

 

 

それでは最後までお読みいただきありがとうございました!

  • この記事を書いた人

そーまん

セキュリティエンジニアやってます。
ブログ歴3年。PVは月15万PV程度。
趣味はボクシング、筋トレ、登山です。
穏やかで人見知りでマイペースな人です。

人気記事

1

こんにちは!SE ブログの相馬です。       今回は、PC に適用されている GPO を確認する方法について書きました。     グループポリシー ...

2

こんにちは!SE ブログの相馬です。       今回は sysprep について、全体的に PC をセットアップする観点から書いてみました。長々と書いてあります。まずは ...

3

こんにちは!SE ブログの相馬です。       今回は、グループポリシーを使って、特定のコンピューターに対して、ドメインユーザーに Administrators 権限を ...

4

こんにちは!SE ブログの相馬です。       今回は、Windows サインイン後に一時ユーザープロファイルが読み込まれてしまった場合の解決方法について書きました。 ...

5

こんにちは!SEブログの相馬です。       今回は、ユーザープロファイルを削除する方法について書いてみました。     1 台の PC を複数人で ...

6

こんにちは!SE ブログの相馬です。       今回は、繰り返し文について書いてみました。PowerShell では他のプログラミング言語同様、繰り返し処理を行うことが ...

7

コマンドを使って CPU とメモリの使用率をデータで取得してみましたので、例えば PC のトラブルシューティングで問題を再現させる際にデータを取得しておくと、原因の特定に役立つ場合があるかと思います。

8

既存の PC と同じ構成で別のメーカーの PC でマスターイメージを作る際、インストールされているアプリを同一にする為に必要になるかと思います。

9

企業で多くの GPO が適用されている環境では、PC に GPO が適用されなかったりする問題が発生する場合があるかと思います。その中でも、コンピューターの構成またはユーザーの構成のどちらかで、...

10

こんにちは!SE ブログの相馬です。       今回は、Windows Server 2016 で NTP サーバーと同期する方法について書きました。   & ...

-Active Directory
-,