サーバのグループポリシーのリンク監視の方法を模索してみる その1
サーバのグループポリシーのリンク監視の方法を模索してみる その2
前回、前々回とポリシー編集とリンクの付与の比較を出力する方法を模索し、
スクリプトを作ってみました。処理内容はこんな感じ。
エラー時の動作などはまったく組み込んでないので参考程度でどぞ。
#CheckGPO Import-Module activedirectory Import-Module grouppolicy #origpoファイルの場所 $workpath="C:\hogehoge\" #メール配信先設定 $smtpHost = "SMTPサーバアドレス" $mailfrom = "FROMのアドレス" $mailto = "メール配信先" $mailsubject = "GPOCheckログ" $mailer = New-Object System.net.mail.smtpclient($smtpHost) function comparegpo ($crlink, $orilink, $crgpo, $origpo) { #gpo設定 変更された場合は新しいGPOのバックアップを行い oriファイルを更新 compare-object $crgpo $origpo -property modificationtime,gpostatus,displayname | Set-Variable diffgpo if ($diffgpo) { "$(get-date) :--GPO変更が発生しました" $diffgpo | sort displayname | ft -AutoSize $timename=$(Get-ItemProperty $workpath\origpo.xml).LastWriteTime -replace "[/,:, ]","" $diffgpo | ? { $_.sideindicator -eq "<=" } | % { "backup実施"; backup-gpo $_.displayname -path $workpath\gpbackup | fl } move-item $workpath\origpo.xml $workpath\log\$timename"gpo.xml" | Out-null $crgpo | Export-Clixml $workpath\origpo.xml } #link設定 変更された場合は oriファイルを更新 compare-object $crlink $orilink -Property target,displayname,enabled | Set-Variable diffgpl if ($diffgpl) { "$(get-date) :--GPO Linkに増減が発生しました" $diffgpl | sort displayname | ft -AutoSize $timename=$(Get-ItemProperty $workpath\orilink.xml).LastWriteTime -replace "[/,:, ]","" move-item $workpath\orilink.xml $workpath\log\$timename"orilink.xml" $crlink | Export-Clixml $workpath\orilink.xml } } #origpo存在チェック if (test-path "$workpath\origpo.xml"){ $origpo=Import-Clixml "$workpath\origpo.xml" } else { "origpo.xml NotFound" get-gpo -all | Export-Clixml $workpath\origpo.xml return } if (test-path "$workpath\orilink.xml"){ $orilink=Import-Clixml "$workpath\orilink.xml" } else { "orilink.xml NotFound" Get-ADOrganizationalUnit -Filter 'Name -like "*"' | % { Get-GPInheritance -Target $_ } | ? { $_.gpolinks -ne "" } | % { $_.path; $_.gpolinks } | Export-Clixml $workpath\orilink.xml return } #現在のOU状態の取得 $crlink = Get-ADOrganizationalUnit -Filter 'Name -like "*"' | % { Get-GPInheritance -Target $_ } | ? { $_.gpolinks -ne "" } | % { $_.path; $_.gpolinks } $crgpo = get-gpo -all #比較対象を関数で渡し、戻り値が存在した場合にはメールを出す $result=comparegpo $crlink $orilink $crgpo $origpo if ($result) { $mailbody=[string]::join("`r`n", ($result | out-string -width 200 )) $mailer.send($mailfrom, $mailto, $mailsubject, $mailbody ) $result | out-string -width 200 > $workpath\recent.log $result "変更が発生し、メールを出しました" }$work フォルダの配下にlog フォルダと、 gpbackupフォルダを用意してください。
適当にGPOを変更かけて、リンクをつけたあとにスクリプトを実行してみました。
あとはこのスクリプトを一定時間のタスクで回しておけば、
多少の監視にはなるかなぁと。
結局、サイトのGPOは対応できなかったけどなッッ
スポンサーリンク