実行環境
実行環境は以下となります。
- Windows Server 2019
PowerShell で用意されているグループポリシー関連のコマンド一覧
Windows Server 2019 のドメインコントローラー環境であれば、PowerShell を起動しただけで GroupPolicy のモジュールは読み込まれているので、昔みたいにわざわざ「Import-Module GroupPolicy」は実施しなくてもいいです。
GroupPolicy モジュールで用意されているコマンドレットの一覧は以下で確認可能です。
1 |
Get-Command -Module GroupPolicy |
各コマンドレットの説明は以下です。
コマンドレット名 | 説明 |
Backup-GPO | ドメイン内の1つのGPOまたはすべてのGPOをバックアップします。 |
Copy-GPO | GPOをコピーします。 |
Get-GPInheritance | 指定したドメインまたはOUのグループポリシーの継承情報を取得します。 |
Get-GPO | ドメイン内の1つのGPOまたはすべてのGPOを取得します。 |
Get-GPOReport | 指定されたGPOまたはドメイン内のすべてのGPOについて、XMLまたはHTML形式でレポートを生成します。 |
Get-GPPermission | 指定したGPOの1つまたは複数のセキュリティプリンシパルのアクセス許可レベルを取得します。 |
Get-GPPermissions | 指定したGPOの1つまたは複数のセキュリティプリンシパルのアクセス許可レベルを取得します。 |
Get-GPPrefRegistryValue | コンピューターの構成またはユーザーの構成でレジストリ基本設定項目を取得します。 |
Get-GPRegistryValue | コンピューターの構成またはユーザーの構成のいずれかで、1つ以上のレジストリベースのポリシー設定を取得します。 |
Get-GPResultantSetOfPolicy | ユーザー、コンピューター、またはその両方のRSoP情報を取得してファイルに書き込みます。 |
Get-GPStarterGPO | ドメイン内の1つのスターターGPOまたはすべてのスターターGPOを取得します。 |
Import-GPO | バックアップされたGPOから指定されたGPOにグループポリシー設定をインポートします。 |
Invoke-GPUpdate | 指定したコンピューターでグループポリシーを更新します。 |
New-GPLink | GPOをサイト、ドメイン、またはOUにリンクします。 |
New-GPO | GPOを作成します。 |
New-GPStarterGPO | スターターGPOを作成します。 |
Remove-GPLink | サイト、ドメイン、またはOUからGPOリンクを削除します。 |
Remove-GPO | GPOを削除します。 |
Remove-GPPrefRegistryValue | コンピューターの構成またはユーザーの構成から1つ以上のレジストリユーザー設定項目を削除します。 |
Remove-GPRegistryValue | コンピューターの構成またはユーザーの構成のいずれかから1つ以上のレジストリベースのポリシー設定を削除します。 |
Rename-GPO | GPOに新しい表示名を割り当てます。 |
Restore-GPO | 1つ以上のGPOバックアップファイルから、ドメイン内の1つのGPOまたはすべてのGPOを復元します。 |
Set-GPInheritance | 指定したドメインまたは組織単位の継承をブロックまたはブロック解除します。 |
Set-GPLink | 指定したGPOリンクのプロパティを設定します。 |
Set-GPPermission | ドメイン内の1つのGPOまたはすべてのGPOのセキュリティプリンシパルにレベルのアクセス許可を付与します。 |
Set-GPPermissions | ドメイン内の1つのGPOまたはすべてのGPOのセキュリティプリンシパルにレベルのアクセス許可を付与します。 |
Set-GPPrefRegistryValue | コンピューターの構成またはユーザーの構成でレジストリ基本設定項目を構成します。 |
Set-GPRegistryValue | コンピューターの構成またはユーザーの構成のいずれかで、1つ以上のレジストリベースのポリシー設定を構成します。 |
使う頻度が高いコマンドレットの使用例
Backup-GPO
本番環境だとグループポリシーの設定を変更する前にバックアップを取って置きたいことがある。その時は、このコマンドを使えばすべての GPO のバックアップを取得することが可能です。
C:\work\GPOBackup フォルダ内にバックアップしたい場合には、以下のコマンドを実行。(フォルダは自動作成してくれないので存在するフォルダを指定する必要があります)
1 |
Backup-GPO -All -Path c:\work\GPO_Backup |
本番環境だと設定変更前と設定変更後に取得したいとなると思うので、以下のようなスクリプトにしておけば、日付/時間付きのフォルダを自動的に作成してバックアップ出来ます。
1 2 3 4 |
$BackupPath = ("GPO_Backup_" + (Get-Date -Format "yyMMdd_HHmmss")) New-Item $BackupPath -ItemType Directory | Out-Null Backup-GPO -All -Path $BackupPath | Out-Null |
Get-GPOReport
GUI のグループポリシーの管理で HTML 形式で GPO の設定情報が取得できるけど、それがコマンドで取得可能。GUI の方だと全ての GPO の取得というメニューがなくて、GPO 1つずつ「右クリック」→「レポート保存」→ファイル名を指定して実行をひたすら繰り返すしかないという残念仕様なので、レポートの取得もスクリプト化しておくと便利。
ただ、PowerShell のコマンドも全部の GPO のレポート保存という機能はなく、以下のように GPO 名と保存する HTMLファイル名を指定する必要がある。
1 |
Get-GPOReport -Name "Default Domain Policy" -ReportType Html -Path "C:\work\Default Domain Policy.html" |
ということで、全ての GPO のレポートを取得するためには、以下のように Get-GPO コマンドと組み合わせてスクリプト化する必要がある。(HTMLファイル名に GPO 名を使ってるけど、GPO の仕様として Windows のファイル名として利用出来ない記号が利用可能で、その場合にはファイルの保存でエラーが出るので、そのような環境だと対象記号を削除するか違う文字に置換するなどの前処理が必要)
コマンドはワンライナーでも書けるけど、個人的にワンライナーってあまり好きじゃないので、こっちの書き方で。
1 2 3 4 5 6 7 |
$Path = ("C:\work\GPO_Reports_" + (Get-Date -Format "yyMMdd_HHmmss")) New-Item $Path -ItemType Directory | Out-Null $GpoList = Get-GPO -All foreach($Gpo in $GpoList){ Get-GPOReport -Name $Gpo.DisplayName -ReportType Html -Path ($Path + "\" + $Gpo.DisplayName + ".html") } |
Invoke-GPUpdate
これまで任意のタイミングでグループポリシーの更新をしたい時は、「gpupdate /force」コマンドを使ってきたけど、Windows Server 2012 から PowerShell にもコマンドレットが用意されています。
自身のグループポリシーを更新する場合。
1 |
Invoke-GPUpdate -force |
別のコンピューターに対して更新を実行する場合。
1 |
Invoke-GPUpdate -Computer [コンピューター名] -force |
VDI 環境とかで特定のプールとかに即時に適用したい場合。VDI 環境だとコンピューター名は先頭部分が固定+連番とかになっていると思うので、Get-ADComputer コマンドレットで、コンピューター名の先頭部分で抽出して適用させることも可能。
1 |
Get-ADComputer -Filter {Name -Like "vdi-pool01-*"} | %{Invoke-GPUpdate -Computer $_.Name -force} |