web-dev-qa-db-ja.com

GPOシャットダウンスクリプトの作成を自動化するにはどうすればよいですか?

ドメインに接続されていないAWSASGでWindowsVMを管理しています。シャットダウン時にスクリプトを実行して(notlogoff)、これらのノードをChefから削除し、Chefを使用してスクリプトを作成/登録したいと思います。削除スクリプトの準備ができました。実装が見つからないシャットダウン時に実行されます。

gpedit.mscローカルコンピューターポリシー->コンピューター構成-> Windows設定->スクリプト(開始/シャットダウン)->シャットダウンを介して手動で行うことができます。これにより、スクリプトがC:\WINDOWS\System32\GroupPolicy\Machine\Scripts\Shutdownに配置されます。残念ながら:

  • スクリプトディレクトリはgpedit.mscを最初に実行したときにのみ作成されるようで、手動で作成することが有効かどうかは不明です。
  • スクリプトをそこに配置するだけでは、それ自体は登録されていないようです。gpedit.mscには表示されません。
  • スクリプトを配置してgpupdate /forceを実行しても(提案されているように ここ )、gpeditに表示されませんが、gpupdateは、いくつかの変更を適用するために再起動が必要になる可能性があることを示唆していました-そうではありませんASGでの再起動としてのオプションは、インスタンスの終了と置換を引き起こす可能性があります

シャットダウン時にスクリプトを実行するためにタスクスケジューラを使用する可能性があることは知っていますが、(少なくとも私の調査からは)主な違いは、タスクスケジューラのシャットダウンスクリプトの実行時間はシステムにかかる時間と同じであるということです。シャットダウンしますが、GPOシャットダウンスクリプトは、シャットダウンが完了するまでシャットダウンを延期します。

したがって、問題は、Chefを介して(つまり、PowerShell、DSC、またはバッチスクリプトを介して)再起動せずにADに接続されていないマシンにGPOシャットダウンスクリプトを登録する方法はありますか?

1
Adrian

@Claytonの回答と この回答 から別の質問への洞察のおかげで、Win2016で動作させることができました。 C:\Windows\System32\GroupPolicy\Machine\Scripts\psscripts.iniを作成する必要がありました:

[Startup]
0CmdLine=C:\WINDOWS\System32\GroupPolicy\Machine\Scripts\Shutdown\seppuku.ps1
0Parameters=

多数のレジストリキーを設定するだけでなく、次のようにします。

  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Shutdown\0
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Shutdown\0\0
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Shutdown\0
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Shutdown\0\0
  • HKLM\SOFTWARE\Policies\Microsoft\Windows\System\Scripts\Shutdown\0
  • HKLM\SOFTWARE\Policies\Microsoft\Windows\System\Scripts\Shutdown\0\0

\Shutdown\0で終わるものは、ポリシー値を取得します。

"GPO-ID"="LocalGPO"
"SOM-ID"="Local"
"FileSysPath"="C:\\Windows\\System32\\GroupPolicy\\Machine"
"DisplayName"="Local Group Policy"
"GPOName"="Local Group Policy"
"PSScriptOrder"=dword:00000001

\Shutdown\0\0で終わるものは、スクリプト値を取得します。

"Script"="C:\\WINDOWS\\System32\\GroupPolicy\\Machine\\Scripts\\Shutdown\\seppuku.ps1"
"Parameters"=""
"IsPowershell"=dword:00000001
"ExecTime"=hex(b):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

これは、C:\WINDOWS\System32\GroupPolicy\Machine\Scripts\Shutdown\seppuku.ps1にあるPowerShellシャットダウンスクリプト用です。これをすべて設定するのは面倒ですが、Chefを使用すると完全に可能です。収束後、スクリプトがgpedit.mscに登録されているのがわかります。スクリプトがシャットダウン時に実際に実行されることをまだ完全に確認していません。それが私の次のステップですが、そうすべきだと思います。

1
Adrian

このLGPOユーティリティを使用してみてください。 GUIを使用してパイロットマシンでシャットダウンスクリプトを構成し、LGPOでバックアップしてから、LGPOを使用して新しく構築されたシステムにインポートできるはずです。

https://blogs.technet.Microsoft.com/secguide/2016/01/21/lgpo-exe-local-group-policy-object-utility-v1-0/

1
Clayton