#背景
複数のGPOで同一の設定項目の内容を調べる際に、GUI操作(画面遷移)が面倒だったので、コマンドライン上で比較できれば効率的かなと思い、調べてみました。
※とはいえ、あんまりPowershellはそこまで詳しくないので、ポチポチ叩いてたらうまくいった(うまくいってしまった)
#GPOで設定した値をコマンドライン(PowerShell)で確認する。
##GPOをXMLファイルに出力する。
GroupPolicyをpowershellにインポート後、
get-GPOReportを使って、対象のGPOをXMLファイルに出力する。
> Import-Module GroupPolicy
> Get-GPOReport -name "GPO名" -reportType XML -path "出力ファイル名"
##前段で出力したXMLファイルを読み込み、標準出力させる。
Get-Contentを使って、変数XMLにXMLファイルを代入する。
あとは、変数XMLから適宜値をポチポチ叩いていき、欲しい値を探す。
#XMLファイルを$XMLに代入する。
> $XML = [xml](Get-Content "出力ファイル名")
#コンピュータの構成であれば
> $XML.GPO.Computer.~~~
#ユーザーの構成であれば
> $XML.GPO.User.~~~
##Policyとか、同一階層に複数ある場合
どうやら、階層を「.(ドット)」で区切ってあげると、配下の構成が参照できるようで。
しかしながら、policyより下の階層を参照しようとしたら、標準出力が出なくなってしまった。
どうやら、Policyが同一階層に複数存在する時は添字をつけてあげないと、うまく見れないようです。
まぁ、機械からすれば、判定できないから当然そうだよね笑
#Policyが一つしかない時は添字がなくてもOK
> $XML.GPO.Computer. (〜省略〜).Policy.~~~
#同一階層にPolicyが複数ある時は添字をつけてあげると、うまく読み込んでくれます。ないと標準出力なし。
> $XML.GPO.Computer. (〜省略〜).Policy[0].~~~
#標準出力した値をGrepする
Where-Obbjectでパイプしてあげるといい感じ。
> $XML.GPO.Computer. (〜省略〜).Policy[0].ListBox.Value.Element |
where {$_.data -like "*検索文字列*"}
##最後に
なんかいいメモないかなと考えてて、よくみるQiitaで試しに書いてみようと思ったら、思いの外、自分のメモ用としては十分みやすく書けるなと思いました。
#参考にさせていただいたサイト
https://activedirectorymania.vamdemicsystem.black/get-gporeport/