![如何自动创建 GPO 关闭脚本?](https://linux22.com/image/708797/%E5%A6%82%E4%BD%95%E8%87%AA%E5%8A%A8%E5%88%9B%E5%BB%BA%20GPO%20%E5%85%B3%E9%97%AD%E8%84%9A%E6%9C%AC%EF%BC%9F.png)
我正在管理未连接到域的 AWS ASG 中的 Windows VM。我想在关机时运行脚本(不是注销) 来从 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
尝试使用此 LGPO 实用程序。您应该能够使用 GUI 在试验机上配置关机脚本,使用 LGPO 备份它,然后使用 LGPO 将其导入到新建的系统上。
答案2
感谢@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
这是位于 的 PowerShell 关机脚本C:\WINDOWS\System32\GroupPolicy\Machine\Scripts\Shutdown\seppuku.ps1
。设置所有这些很麻烦,但使用 Chef 完全可以实现,收敛后,我看到脚本在 中注册gpedit.msc
。我尚未完全确认脚本是否在关机时实际执行,这是我的下一步,但我相信应该如此。