Mas*_*imo 2 rdp remote-desktop remote-desktop-services windows-server-2012
我有一台带有多个网络接口的服务器,我需要 RDP 来只监听其中一个的连接;该服务器不是远程桌面服务器,RDP 仅用于远程管理。
在 Windows Server 2008 R2 中,我可以使用Remote Desktop Session Host控制台进行配置;在 Windows Server 2012 中,该控制台不再存在。
如何在 WS2012 中配置它?
远程桌面服务实际上有一个非常丰富的 WMI 对象库,您可以利用它来查询和操作配置。从 Vista/2008 开始,它位于root\cimv2\TerminalServices命名空间中。这是浏览可用内容的好地方:远程桌面服务配置类
关于您的具体问题,我想澄清一下,RDP 只能绑定到网络适配器,而不是特定的 IP。我知道你说的是“网络接口”。我只是想为其他可能偶然发现这个问题的人澄清一下。在只有一个适配器和多个 IP 的机器上,这是一种比较常见的请求。如果这就是您要查找的内容,那么还有其他 ServerFault 问题以及更详细的答案。但如果我没记错的话,最好的办法是使用内置防火墙限制连接。
具有您需要的特定类称为Win32_TSNetworkAdapterSetting。有 3 种与您可以使用的类相关联的方法:
根据我的经验,由于“所有网络适配器”选项,SetNetworkAdapterLanaID比SelectNetworkAdapterIP更可靠。似乎如果它当前配置为“所有网络适配器”,它不会更改为具有您指定 IP 的特定适配器,它只会将其保留在“所有网络适配器”上,这在技术上仍然是正确的。
因此,您只能使用SetNetworkAdapterLanaID并且它需要一个整数 ID 值作为该方法的参数。因此,您可以通过以下方式找到要使用的 ID。首先获取对类实例的引用。我这里的示例将使用名为“RDP-Tcp”的默认终端名称,但您的系统可能(尽管不太可能)具有其他或不同的终端名称。
您可以使用以下 PowerShell 检查配置的网络适配器的当前状态:
gwmi Win32_TSNetworkAdapterSetting -filter "TerminalName='RDP-Tcp'" -namespace "root/cimv2/TerminalServices" | Select NetworkAdapterLanaID,NetworkAdapterName
Run Code Online (Sandbox Code Playgroud)
为了调用一个方法,将类的实例分配给一个变量是很好的,所以让我们这样做:
$ts = gwmi Win32_TSNetworkAdapterSetting -filter "TerminalName='RDP-Tcp'" -namespace "root/cimv2/TerminalServices"
Run Code Online (Sandbox Code Playgroud)
这个类的一个方便的特性是它返回的几个属性是您可以使用的可能网络适配器的列表。
$ts | select -expand DeviceIDList
$ts | select -expand NetworkAdapterList
Run Code Online (Sandbox Code Playgroud)
这应该返回两个列表。第一个是基于 0 的 ID 列表,第二个是与第一个列表关联的适配器的友好名称。所以在我的测试机器上,它返回:
0
1
Run Code Online (Sandbox Code Playgroud)
和
All network adapters configured with this protocol
Intel(R) PRO/1000 MT Network Connection
Run Code Online (Sandbox Code Playgroud)
如果您想将DeviceID属性中的 ID与其在 中的名称相关联NetworkAdapterList,您可以这样做:
$adapters = $ts | select -expand NetworkAdapterList
$device_ids = $ts | select -expand DeviceIDList
$adapter_list = @()
foreach ($device_id in $device_ids) {
$adapter_list += @{$device_id = $adapters[$device_id]}
}
$adapter_list # Mapping of device IDs to adapter names
Run Code Online (Sandbox Code Playgroud)
默认情况下,它设置为使用 ID 0,即“使用此协议配置的所有网络适配器”。因此,如果我们想将其更改为显式使用英特尔 NIC,我们只需使用现有对象和关联 ID 调用该方法。
$ts.SetNetworkAdapterLanaID(1)
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过重新查询对象来验证更改:
gwmi Win32_TSNetworkAdapterSetting -filter "TerminalName='RDP-Tcp'" -namespace "root/cimv2/TerminalServices" | Select NetworkAdapterLanaID,NetworkAdapterName
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33431 次 |
| 最近记录: |