Windows Server 2008 R2 允许在不使用域的情况下部署终端服务器(远程桌面服务),并且无需坚持使用域。这非常有用,尤其是对于独立虚拟或云部署的服务器,这些服务器是为不需要或不想要任何 ActiveDirectory 或域功能的远程客户端进行远程管理的。
随着微软在每次 Windows 版本中对其技术的限制越来越严格,这一问题变得越来越困难。在 Windows Server 2012 中,如果不在域中,则配置远程桌面服务的许可会更加困难,但仍然有可能。在 Windows Server 2012 R2(至少在预览版中)中,障碍现在变得更加严重:
Windows Server 2012 R2 中的“添加/删除角色和功能”向导具有特殊的 RDS 部署模式,该模式有一条规则,规定如果您不在域中,则无法部署。它告诉您首先创建或加入域。这当然与 Active Directory 域控制器不应与终端服务器计算机是同一台计算机这一事实直接冲突。因此,微软的技术与其说是云操作系统,不如说是不需要的节点集群,需要支持我真正想要部署的一台机器。这太糟糕了,所以我正在尝试寻找一种解决方法。
但是,如果您跳过该向导并仅选中主角色/功能向导中的复选框,则可以部署这些功能,但没有 UI 来配置它们,并且当您返回到角色向导上的 RDS 配置页面时,您会收到一条消息,提示您无法在以本地计算机管理员身份登录时管理远程桌面服务系统,因为尽管您拥有所有管理员权限(在基于工作组的系统中),但是 RDS 配置 UI 不会接受这些凭据并让您继续。
我的问题是,我是否仍能以某种方式获得以下最终结果:
- 我需要允许每个系统有 10-20 个用户拥有 RDS(TS)会话。
- 我不需要任何花哨的 RDS 选项,除非 Microsoft 以某种方式依赖这些功能。我相信我需要“RDS 会话主机”,因为这是“终端服务器”的核心。Microsoft 表示它是“远程桌面服务客户端的完整 Windows 桌面”。
- 我需要配置许可,以便宽限期不会过期导致我的 RDS 无法运行,所以这可能意味着我需要一种配置 TS CAL 的方法。
如果以上所有操作在技术上都可以通过明智地使用 PowerShell 来完成,我甚至准备考虑开发完成上述操作所需的所有 PowerShell 脚本。我并不是要求别人帮我写这些脚本。我想问的是,除了故意破坏 Workgroup 用户的 2012 R2 UI 之外,是否有人知道我要做上述操作是否还存在技术障碍?如果我从 PowerShell 脚本操纵和控制底层技术,它们是否仍然有效?
显然,一个字“是”或“否”的答案对任何人都没有多大用处,所以问题实际上是“是”或“否”,以及为什么?如果答案是“是”,那么如何回答。
答案1
我发现自己和你的情况一样。在独立的 Server 2012 机器上部署远程桌面非常困难,因为微软不允许你在无域网络上运行它,如果你这样做,你就无法管理所有设置。
因此,您可以安装一个基于工作组的机器并让远程桌面角色在其上运行。我们还需要在同一台机器上安装远程桌面许可功能。但是,一旦到了这个地步,即使您在服务器上安装了正确的 RDS CAL,当用户登录时,也会收到试用期已到的消息。
我终于设法让它工作了,至少像我们以前知道的旧终端服务一样。它正在我的两台小型客户的生产机器上工作,这些客户需要 RDS,但负担不起在网络上安装两台服务器。
开始了:
使用以下步骤安装远程桌面授权和远程桌面会话主机角色服务:
- 打开服务器管理器
- 单击“管理”,然后选择“添加角色和功能”
- 选择基于角色或基于功能的安装
- 在远程桌面服务下,选择远程桌面许可和远程桌面会话主机角色服务。
- 继续安装
将许可证服务器添加到终端服务器许可证服务器组并重新启动远程桌面服务(您可以使用
licmgr.exe
)将许可证添加到许可证服务器。
配置远程桌面会话主机角色以使用本地远程桌面授权服务器。请按照以下步骤操作:
- 以管理员身份打开 PowerShell
- 在 PS 提示符下键入以下命令,然后按 Enter:
$obj = gwmi -namespace "Root/CIMV2/TerminalServices" Win32_TerminalServiceSetting
运行以下命令设置许可模式(注意:Value = 2 表示每设备,Value = 4 表示每用户,我们使用每用户)
$obj.ChangeMode(4)
运行以下命令将机器名称替换为许可证服务器(mylicenseserver
是您的服务器的名称):
$obj.SetSpecifiedLicenseServerList("mylicenseserver")
运行以下命令来验证使用上述步骤配置的设置:
$obj.GetSpecifiedLicenseServerList()
您应该在输出中看到服务器名称。
完成此操作后,重新启动系统并以任何用户身份登录(如果使用工作组,您知道您的用户必须是其中的一部分Remote Desktop Users
),试用期消息将消失。
这一切混乱的根源:http://support.microsoft.com/kb/2833839
管理Powershell
你可以用 管理一些事情Powershell
。要查看命令,请尝试:
import-module RemoteDesktop get-command -module RemoteDesktop
您可以通过 Powershell 执行一系列命令来管理您的机器。但是,我尝试了一些命令,但其中一些命令要求您安装一些额外的功能,而这些功能无法在我们正在讨论的场景中部署。
丑陋的方式
如果以上方法都不适合您,还有一种方法可以将宽限期重置为最初的 120 天。当然,我不建议这样做,因为用户会不断注意到该消息。当然,您需要购买适当的许可证。
要重置计数器,只需删除此注册表项:
HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\Grace Period
当然,你需要额外的权限才能做到这一点,regedit
以管理员身份执行将不起作用。试试这个:
- 得到执行命令
- 以管理员身份启动 cmd
- 跑步
psexec -s -i regedit.exe
- 删除所需的键
- 重启
希望这些对您有用。如果您使用 Powershell 和 RDS 取得了一些进展,请告诉我们。
答案2
当我在实验室中设置环境来尝试这一点(一个没有域的简单 RDS 部署)时,我找到了你的问题的答案,尽管这不是你想听到的。
[Server 2012 和 2012 R2] 中的 RDS 要求将其所有服务器添加到域中。这是根据微软远程桌面虚拟化团队的一位项目经理的说法,他撰写了链接的 MSDN 博客文章《使用 Windows PowerShell 设置新的远程桌面服务部署》。
因此,很抱歉这不是您想要的答案,但在我看来它相当权威。您无法做您想做的事,因为 Microsoft 已决定将域成员资格作为 Server 2012 和 2012 R2 中 RDS 服务器的技术要求。
答案3
我在测试过程中发现,至少配置 1 个启用 IPv6 的 NIC 非常重要。这是必需的,因为为了让 RDS 许可证服务器与自身通信,环回会尝试通过 IPv6 进行解析(如 Ping 所示)。我在两个 NIC 上都禁用了 IPv6,这导致服务器无法正确环回。