複数の NIC を接続していて、特定の IP を設定している NIC でリモートデスクトップのポートをバインド (リッスン) するためのサンプルです。
詳細については 影響を受けてある製品のいずれかを実行しているコンピュータのリモート デスクトップ セッションは確立できません。 を参照していただくとよいかと。
リモートデスクトップを有効にした場合、デフォルトでは全ての NIC で接続要求を受け付けることができるようになっています。
2008 R2 まではリモートデスクトップ セッションホストの構成でどのネットワークアダプターを使用するかを選択することができましたが、2012 以降はこの管理ツールの使い勝手が変わっているため、ワークグループ環境では関連する設定を直接変更する必要があります。
![]()
PowerShell で実行する場合は以下のようなスクリプトで特定の NIC を設定しているネットワークアダプターを使用するように設定することができます。
$TargetIP = "10.200.0.9"
$TargetIF = Get-NetIPAddress | where IPv4Address -eq $TargetIP
$TargetRegName = $null
$IFRegKey = "registry::HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNetwork{4D36E972-E325-11CE-BFC1-08002BE10318}"
$TSLanKey = "registry::HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Serverlanatable"
$TSLanAdapterKey = "registry::HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp"
$NetworkRegs = Get-ChildItem "$IFRegKey" | Where SubkeyCount -ne 0
foreach ($NetworkReg in $NetworkRegs){
if ((Get-ItemProperty "registry::$NetworkRegConnection").Name -eq $TargetIF.InterfaceAlias){
$TargetRegName = $NetworkReg.PSChildName
break
}
}
If ($TargetRegName -eq $null){
Write-Output "Network IF Error"
return -1
}
$TSLanAId = Get-ChildItem "$TSLanKey" | Where-Object PSChildName -eq $TargetRegName | Get-ItemProperty
Set-ItemProperty -Path $TSLanAdapterKey -Name "LanAdapter" -Value $TSLanAId.LanaId
Stop-Service UmRdpService
Stop-Service TermService
Start-Service TermService
Start-Service UmRdpService
どのネットワークアダプターで要求を受け付けるかは、[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp] の [LanAdapter] で設定をしているのですがデフォルトでは [0] (全てのネットワークアダプター) が使用されるようになっています。
この項目には 0~の数値を設定するのですが設定する値は [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Serverlanatable] から選択する必要があります。
![]()
このキー配下に GUID でどのアダプターが LanaId 何番になるかが格納されていますので、対象の IP が設定されているネットワークアダプターの GUID を [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNetwork{4D36E972-E325-11CE-BFC1-08002BE10318}] から取得して、それをもとにリモートデスクトップのネットワークアダプターを設定し、設定を適用するためにリモートデスクトップのサービスを再起動しています。
![]()
もう少しうまい書き方があるかと思いますが、サンプルとして。