如何通过命令行更改组策略?

8
我希望使用命令行更新Windows服务器中的组策略。我不想使用编程的方式。我阅读了thisthis,然后尝试根据组策略和注册表键的映射删除注册表键,但组策略没有更新。

具体来说,我想在组策略中将计算机配置->管理模板->Windows组件->Windows更新->配置自动更新设置为未配置

所以,我运行以下命令:

C:\Windows\system32>reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v ScheduledInstallTime /f
The operation completed successfully.

C:\Windows\system32>reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v ScheduledInstallDay /f
The operation completed successfully.

C:\Windows\system32>reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v NoAutoUpdate /f
The operation completed successfully.

C:\Windows\system32>reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v AUOptions /f
The operation completed successfully.

但之后,组策略没有更新。我需要运行另一个命令来将我的注册表更改传播到组策略吗?如果需要,该命令是什么?我错过了什么吗?
我尝试过 gpupdate /force ,它覆盖了我的注册表更改。我需要相反的操作。

2
gpupdate /f 更新组策略,这将修复你所做的事情。组策略每小时更新一次(可能是2小时)。因此,你的更改应该会被你的组策略文件覆盖(组策略在应用时更改注册表)。更改注册表值并不等同于更改组策略,组策略将覆盖你的更改。如果你的注册表更改没有生效,则该组件可能会在启动时读取它。 - user6017774
1
sc config wuauserv start= disabled - user6017774
是的。这就是组策略所做的。而且它每两个小时都会执行一次。因此,在引导后和每两个小时后更改组策略或禁用服务。 - user6017774
@Noodles 那么,我可以使用命令更改该组策略吗?实际上,这是我的真正问题 :) - Abhishek
@Noodles 所以,我需要编写C++代码。 - Abhishek
显示剩余7条评论
4个回答

9
如何通过命令行更改组策略?看这里: LGPO.exe - 本地组策略对象实用程序,版本1.0。详情请见:此处

1
你能否在你的回答中添加更多细节?链接可能会失效。 - Flimm

4

对于域中的组策略对象,可以使用Powershell从命令行配置基于注册表的组策略设置。如果您没有在域控制器上运行,则必须安装组策略管理控制台。

请参阅Windows PowerShell中的Group Policy Cmdlets,特别是Set-GPRegistryValue cmdlet

当然,您也可以从传统命令行中运行Powershell命令,例如:

powershell get-gpregistryvalue -Name gpo-name -Key HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU -ValueName AUOptions

据我所知,没有适用于本地组策略的命令行解决方案。如需了解本地组策略,请参阅 Glenn 的回答。

2
这是为了获取值,对吧?我需要去设置它们。 - Abhishek
1
它在本地组策略中无法工作,正如你所说的。我需要将机器添加到某个域才能使其工作?:( - Abhishek
知道了。谢谢链接,它与我分享的链接类似。从逻辑上讲,一个命令就足够了,因为我们正在查找一个“键”并设置其“值”。我不确定为什么微软没有将这个特性/命令提供给用户。 - Abhishek
1
那就是“负100分原则”,请参见https://technet.microsoft.com/zh-cn/library/dn167709.aspx;简而言之,很少有人会使用这样的功能,因此实施起来并不划算。 - Harry Johnston
@GlennSlayden:太好了。你应该把它发布为答案。 - Harry Johnston
显示剩余6条评论

3

使用Set-GPRegistryValue工具即可解决问题。常见的问题是,您已经有了GP路径,但需要原始数据。您可以从设置电子表格中获取原始数据(Keypath和value),从ADMX文件中获取(如果是管理模板设置),或者从GPOGuy的免费工具registry.pol viewer中获取。

您提供的命令可以清理注册表数据,但这些命令并不执行此操作。它们将值添加到存储在GPO中的registry.pol文件(或GP Preference的registry.xml文件)中。然后,这些设置将被发送到目标系统,并应用于注册表。此外,对于基于非注册表的策略以及跨本地策略自动化设置的能力,请搜索“组策略自动化”,可能会有一种解决方案适合你。


根据 OP 的说法,Set-GPRegistryValue 至少在本地组策略中无效。 - Harry Johnston
Set-GPRegistryValue 无法直接针对本地策略进行操作 - 这里有1)第三方选项(搜索“自动化组策略”),还有2)“黑科技”,可以将基于域的 GP 数据传输到本地策略,但我不建议使用。3)LGPO 工具如果需要本地策略部分,则可以使用,但不是非常灵活。 - Kevin
同时向@HarryJohnston道歉,我没有在原始帖子中看到本地政策的提及,我忽略了这条评论。是我的错误。 - Kevin
@Kevin 由于 Set-GPRegistryValue 更改了注册表值,它将在下一次重启时被覆盖。正确吗? - Abhishek
抱歉 @Abhishek,耽搁了 - set-gpregistryvalue 不会改变注册表... 它会改变 GPO 中的 registry.pol。实际的注册表只有在链接组策略并客户端系统刷新策略后才会更新。当客户端目标使用这个新的 registry.pol 文件更新策略时,它将把数据存储在注册表的适当位置,并且不会在下次重启时被覆盖。 - Kevin
好的。让我试一试,然后回来。 - Abhishek

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接