HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services
在和中编辑设置有何区别HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server
?
两者似乎都出现了类似的设置。例如,每用户单次会话数终端服务的密钥。在 Server 2012R2 中,更改此设置的唯一方法是通过本地策略编辑器(Server 2008 中的“管理工具”项已消失)。我假设使用 gpedit.msc 更改区域HKLM:\SOFTWARE\Policies
。
策略设置是否充当其他设置的掩码,强制其进入特定状态(如果存在)?
该服务器不属于域的一部分。
如果我正在编写脚本来引导一台新机器并想要配置此设置,那么哪个地方是更改它的最佳位置?
答案1
我要在这里进行更改,在 CurrentControlSet 位置。您不需要 gpedit.msc 或任何特殊设置,只需进行注册表设置即可。
Set-ItemProperty -Path "registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name "fSingleSessionPerUser" -Value 0
要重新启用,请将其设置回“1”。
Set-ItemProperty -Path "registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name "fSingleSessionPerUser" -Value 1
编辑
应该注意的是,组策略确实会改变策略位置。有关详细信息,请参阅 .adm 文件 -C:\Windows\PolicyDefinitions\TerminalServer.admx
这是设计使然,无论如何,我仍然会在 currentcontrolset 中进行更改。原因是 Microsoft 需要第二个位置来存放组策略,这样他们就可以覆盖实际设置,而无需像在 nt4 时代那样实际标记注册表。
<policy name="TS_SINGLE_SESSION" class="Machine" displayName="$(string.TS_SINGLE_SESSION)" explainText="$(string.TS_SINGLE_SESSION_EXPLAIN)" key="SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" valueName="fSingleSessionPerUser">
<parentCategory ref="TS_CONNECTIONS" />
<supportedOn ref="windows:SUPPORTED_WindowsNET" />
<enabledValue>
<decimal value="1" />
</enabledValue>
<disabledValue>
<decimal value="0" />
</disabledValue>
</policy>
答案2
我无法确认这一点,但是“策略”注册表项是为组策略设计的,将具有优先权。应保护注册表项不被用户更改,并且根据软件级别的实施,它还可能阻止应用程序内的更改。
关于“策略”键还有其他注意事项 - 例如,当组策略停止应用时,应将其清除。根据我的经验,在工作组中,这些键将保留在那里,但我不确定如果您加入域并开始应用其他策略会发生什么。
换句话说,两者都可以使用,但如果您试图为所有用户强制执行设置,并且不打算将计算机加入域,那么策略通常是更好的选择。如果您可能要加入域或强制执行不是您的主要关注点,那么请坚持使用“Control”键。
答案3
据微软称,HKLM\SOFTWARE\Policies
注册表树“包含存储组策略设置的条目”,而HKLM\SYSTEM\CurrentControlSet\Control
注册表树“包含控制系统启动和设备配置某些方面的信息”。
从实际角度来说,这意味着Policies
除非您有充分的理由,否则通常不应直接编辑树,因此在一般情况下,您应该在Control
注册表树下进行更改。但是,Policies
树中的设置将优先于树下冲突的设置Control
,因此如果担心机器从某处获取冲突的设置,那么这将是在Policy
而不是下进行更改的“充分理由” Control
。
否则,两者之间实际上没有区别,并且可以从任一注册表树中配置许多设置。
答案4
根据我的经验(域环境),如果在策略树上没有设置明确的 GPO,则当您在策略和控制中设置两个冲突的键时,控制键将获胜。