如何自動創建 GPO 關閉腳本?
我在 AWS ASG 中管理未附加到域的 Windows 虛擬機。我想在關機(而不是註銷)時執行一個腳本以從 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 關閉腳本而無需重新啟動?
感謝@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
以get 策略值結尾的那些:"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
這是針對位於 的 PowerShell 關閉腳本
C:\WINDOWS\System32\GroupPolicy\Machine\Scripts\Shutdown\seppuku.ps1
。設置這一切很痛苦,但使用 Chef 完全可以,並且在收斂後,我看到腳本註冊在gpedit.msc
. 我還沒有完全確認腳本在關機時實際執行,這是我的下一步,但我相信它應該這樣做。
嘗試使用此 LGPO 實用程序。您應該能夠使用 GUI 在試點機器上配置關機腳本,使用 LGPO 備份它,然後使用 LGPO 將其導入到新建的系統中。