设置- 我正在运行一个小型网络,其中装有 Windows Server 2008 R2。我有 2 个 GPO 运行公司所需的安全设置。在以下层次结构中:
- GPO A(定期开启)
- GPO B(常开)
GPO A 用于修补我们的系统,因此当 Windows 更新服务设置为“链接已启用”时,它会被设置为“自动”。GPO B 正在设置公司所需的安全设置,因此它会将 Windows 更新服务设置为“已禁用”。
问题 - 启用并强制执行 GPO 时,Windows 更新服务将设置为已禁用。根据 RSOP,它应该设置为自动,但它实际上并未启动或自动,而是被禁用。GPO A 应该优先并将其设置为自动。
问题 - 2 个 GPO 不能控制 1 个服务吗?据我了解,GPO 是按优先级管理的,因此在处理 GPO 时,GPO A 应该保持服务处于自动状态。有没有办法让我保持这些设置不变,或者其中一个 GPO 是否需要重新配置 Windows 更新服务器?
编辑1:如果我编写了一个在 Powershell 中启动服务的启动脚本,GPO 每小时重新应用一次就会禁用该服务。即使强制执行 GPO,它仍然会禁用该服务。
答案1
JukEboX,
一般来说,我们不会为别人编写脚本,但在这种情况下,我认为脚本比仅使用组策略更好,所以我愿意为任何尝试做同样事情的人编写 PowerShell。
在组策略中,创建一个新的 GPO,并在 GPO 中将一个新文件写入每台计算机(计算机策略)。PowerShell 文件可以放在任何位置,但请记下位置,因为稍后您将需要它。在下面的示例中,我使用了位置 \\server\share\status.txt。如果您更改位置或文件名,则需要更新代码。
$WindowsServiceName = "wuauserv"
$NewStatus = Get-Content "\\server\share\status.txt"
function EnableWindowsService
{
Set-Service $WindowsServiceName -StartupType Automatic
Start-Service $WindowsServiceName
}
function DisableWindowsService
{
Stop-Service $WindowsServiceName
Set-Service $WindowsServiceName -StartupType Disabled
}
If ($NewStatus -like 'enabled' )
{
EnableWindowsService
}
If ($NewStatus -like 'disabled' )
{
DisableWindowsService
}
完成此操作后,您应该创建一个 GPO,将 PowerShell 脚本作为登录脚本或注销脚本运行(或者您可以构建一个计划任务,以便在您指定的触发事件发生时运行 PowerShell 脚本)。
在 status.txt 中你应该写已启用或者已禁用。
当触发发生时,PowerShell 文件将读取 status.txt 的内容,并根据该文件的内容启用并启动 Windows 更新服务或停止并禁用 Windows 更新服务。
由于这是使用 PowerShell 完成的,因此您也可以使用 PowerShell 按需远程运行文件。如果使用此方法,则需要删除两个 GPO。如果使用此方法,则不需要它们,因为这会执行相同的操作。唯一的区别是您可以比每 60 分钟更频繁地运行它,您可以按需运行它,并且您没有冲突的 GPO。这满足了您编写的安全要求并且效果更好。
答案2
在 GPO 中的系统服务之间进行一些初步测试之后
计算机配置 > 策略 > Windows 设置 > 系统服务
我发现这些设置最适合使用基于 Windows 的服务设置首选项和安全设置。我确实禁用了一些不是基于 Windows 的服务的系统服务,这就是我找到答案的地方。位置是
在我的安全 GPO 中,我有启动设置为Disabled
,并且服务操作设置为Stop Service
。这将确保如果服务在修补时间之外运行,它将停止并禁用它。
在我的更新 GPO 中,我有启动设置为Automatic
,并且服务操作设置Start Service
。
然后,我将修补 GPO 放在组策略的更高层次中。启用更新 GPO 策略后,此 GPO 将覆盖安全 GPO 中应用的策略。
如果以这种方式设置,您可以在任何机器上执行简单的 gpupdate /force,它将根据 GPO 是否启用以及哪个在层次结构中更高来改变服务的控制。这正是我所寻找的。
这篇文章非常有帮助,我希望可以帮助其他人:如何使用组策略控制服务(作者:Alan Burchill)