Os Serviços de Área de Trabalho Remota na verdade têm uma biblioteca de objetos WMI bastante rica da qual você pode tirar proveito para consultar e manipular a configuração. A partir do Vista / 2008, ele está localizado no namespace root \ cimv2 \ TerminalServices . Aqui está um bom lugar para começar a navegar o que está disponível: Classes de configuração de serviços de área de trabalho remota
Com relação à sua pergunta específica, gostaria apenas de esclarecer que o RDP só pode ser vinculado a um adaptador de rede, não a um IP específico. Eu sei que você disse "interface de rede". Eu só queria esclarecer para os outros que podem se deparar com essa questão. É um pedido comum em máquinas que possuem apenas um adaptador e vários IPs. Se é isso que você está procurando, existem outras perguntas do ServerFault com respostas mais detalhadas. Mas, se bem me lembro, sua melhor aposta é limitar as conexões usando o firewall embutido.
A classe específica que tem o que você precisa é chamada de Win32_TSNetworkAdapterSetting . Existem 3 métodos associados à classe que você pode usar:
Na minha experiência, SetNetworkAdapterLanaID é mais confiável do que SelectNetworkAdapterIP devido à opção "Todos os adaptadores de rede". Parece que, se estiver atualmente configurado para "Todos os adaptadores de rede", ele não será alterado para o adaptador específico com o IP que você especificar, apenas será mantido em "Todos os adaptadores de rede", o que tecnicamente ainda está correto.
Então, você fica com SetNetworkAdapterLanaID e requer um valor de ID inteiro como um argumento para o método. Então, aqui está como você encontra o ID para usar. Primeiro, obtenha uma referência à instância da classe. Meu exemplo aqui usará o nome do terminal padrão chamado "RDP-Tcp", mas é possível (embora improvável) que seus sistemas tenham nomes de terminal adicionais ou diferentes.
Você pode verificar o status atual de qual adaptador de rede está configurado com o seguinte PowerShell:
gwmi Win32_TSNetworkAdapterSetting -filter "TerminalName='RDP-Tcp'" -namespace "root/cimv2/TerminalServices" | Select NetworkAdapterLanaID,NetworkAdapterName
Para chamar um método, é bom ter a instância da classe atribuída a uma variável, então vamos fazer isso:
$ts = gwmi Win32_TSNetworkAdapterSetting -filter "TerminalName='RDP-Tcp'" -namespace "root/cimv2/TerminalServices"
Um recurso útil desta classe é que algumas das propriedades que ele retorna são listas dos possíveis adaptadores de rede que você pode usar.
$ts | select -expand DeviceIDList
$ts | select -expand NetworkAdapterList
Isso deve retornar duas listas. A primeira é uma lista de IDs baseada em 0 e a segunda é o nome amigável dos adaptadores associados à primeira lista. Então, na minha máquina de teste, ele retornou:
0
1
e
All network adapters configured with this protocol
Intel(R) PRO/1000 MT Network Connection
Se você quiser correlacionar os IDs na propriedade DeviceID
aos nomes deles no NetworkAdapterList
, você pode fazer assim:
$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
Por padrão, ele está configurado para usar o ID 0, que é "Todos os adaptadores de rede configurados com este protocolo". Portanto, se quisermos alterá-lo para usar o Intel NIC explicitamente, basta chamar o método usando nosso objeto existente e o ID associado.
$ts.SetNetworkAdapterLanaID(1)
Você pode verificar a alteração ao consultar novamente o objeto:
gwmi Win32_TSNetworkAdapterSetting -filter "TerminalName='RDP-Tcp'" -namespace "root/cimv2/TerminalServices" | Select NetworkAdapterLanaID,NetworkAdapterName