Windowsのグループポリシーをテキストファイルにインポート・エクスポートする

nogajun
nogajun

大学で学生が使うWindowsに制限をかけるためにグループポリシーを利用していますが、これが非常に使いづらいです。

そのグループポリシーの使いづらさをなんとかするために、LGPOというグループポリシーの設定をインポート、エクスポートするコマンドラインのツールを使ったので、その備忘録としてのメモ。

注意など

LGPOで書き出される設定は、有効または無効にした設定のみです。未構成の設定は書き出されません。

どういうことかというと、有効または無効に設定した項目を戻すために、その項目を未構成にして書き出してもその部分は書き出されないということです。 設定を戻すために書き出したいのであれば、反対の設定にして書き出す必要があります。

テキストで設定をインポート、エクスポートするのはなぜ?

テキストにするのは、自分が設定を確認しやすいからです。バイナリのままインポート、エクスポートしても何も問題ありません。

テキストファイルへのエクスポート

以下の例では、Cドライブのworkフォルダーを作成して、その中にLGPO.exeも置いて作業をしています。作業フォルダーとしては、C:\work\ということになります。

設定をテキストファイルにエクスポートするには、バイナリにエクスポートして、次にそのバイナリからテキストへエクスポートするという二段階の手順を行う必要があります。

バイナリファイルとしてのエクスポートは、管理者権限で起動したターミナルから以下のコマンドでエクスポートできます。

.\LGPO.exe /b C:\work\ 

バイナリは、指定したフォルダーにuuidのユニークな文字列のフォルダー名で生成されます。 単純に設定をインポート、エクスポートしたいだけであれば、このフォルダーを保存して利用すればOKです。

テキストファイルにエクスポートするには、このフォルダーに含まれるregistry.polを利用します。

エクスポートしたグループポリシーのバイナリは、コンピューターの構成ユーザーの構成の2つに別れています。 ですので、テキストファイルへのエクスポートは、コンピューターの構成ユーザーの構成の2回に分けてエクスポートします。

コンピューターの構成ユーザーの構成のどちらか片方だけ設定していない場合は、片方だけエクスポートしてください。

コマンドオプションの/parseのあとは、コンピューターの構成の場合は/m、ユーザーの構成の場合は/uになっているので気をつけてください。

.\LGPO.exe /parse /m 'C:\work\{CE27B1F8-129C-4115-ADE8-C658E5A82F51}\DomainSysvol\GPO\Machine\registry.pol' > config-machine.txt
.\LGPO.exe /parse /u 'C:\work\{CE27B1F8-129C-4115-ADE8-C658E5A82F51}\DomainSysvol\GPO\User\registry.pol' > config-user.txt

設定を別のマシンに適用するには、ここで書き出したテキストファイルをインポートすれば使えます。

グループポリシーにテキストファイルの設定を適用する

エクスポートしたテキストファイルの設定をグループポリシーに適用するには、以下のコマンドで適用できます。

.\LGPO.exe /t .\config-machine.txt
.\LGPO.exe /t .\config-user.txt

上のコマンドは、次のようなバッチファイルにしておくと一括で適用できるので便利です。

cd /d %~dp0

.\LGPO.exe /t .\config-machine.txt
.\LGPO.exe /t .\config-user.txt

Windowsクソ面倒くさい

LinuxならAnsibleなりPyinfraを使ったり、なんならシェルクスクリプトだけで対応できるのに、なんやねん、これ。