サーバー IP アドレスが変更された後、RDS クライアントが RD セッション ホスト サーバーに接続できない

この記事では、リモート デスクトップ サービス (RDS) クライアントがリモート デスクトップ (RD) セッション ホスト サーバーに接続できない問題の解決策について説明します。

適用対象: Windows Server 2012 R2
元の KB 番号: 2844958

重要

この資料には、レジストリの編集方法が記載されています。 レジストリを変更する前に必ずレジストリのバックアップを作成してください。 また、問題が発生した場合に備えて、レジストリの復元方法を理解しておいてください。 レジストリをバックアップ、復元、変更する方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を表示してください。
322756 Windows でレジストリをバックアップおよび復元する方法

現象

次のシナリオを検討します。

  • Windows Server 2012で RDS の標準デプロイを設定します。 展開には、RD セッション ホスト サーバー、RD 接続ブローカー サーバー、RD Web Access サーバーが含まれています。
  • RD Web Access Web サイトを介して RDS クライアントからアクセスできるセッション コレクションを作成します。
  • セッション コレクション内のすべての RD セッション ホスト サーバーの IP アドレスが変更されます。

このシナリオでは、RDS クライアントはセッション コレクションに接続できません。接続中に次のエラー メッセージが表示されます。

資格情報が機能しませんでした。

原因

この問題は、次のサブキーの古いレジストリ エントリが原因で発生します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\ClusterSettings

レジストリ エントリには SessionDirectoryRedirectionIP 、RDS デプロイの作成時に割り当てられた RD セッション ホスト サーバーの IP アドレスが格納されます。 RD セッション ホスト サーバーの IP アドレスは変更されますが、RD 接続ブローカー設定の IP アドレスは更新されません。 そのため、RDS クライアントはセッション コレクションに接続できません。

解決方法

警告

レジストリ エディタや他の方法を使用してレジストリを変更する際、適切に変更しないと重大な問題を引き起こす可能性があります。 場合によっては、オペレーティング システムの再インストールが必要になります。 こうした問題の修復について、マイクロソフトはいかなる保証もいたしません。 レジストリの変更はユーザー自身の責任において行ってください。

この問題を解決するには、セッション コレクション内の各 RD セッション ホスト サーバーから、次のレジストリ サブキーのレジストリ エントリを削除 SessionDirectoryRedirectionIP します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\ClusterSettings

または、次の PowerShell スクリプトを実行することもできます。 このスクリプトは、デプロイ内のすべての RD セッション ホスト サーバーからレジストリ エントリを削除します。

Import-Module RemoteDesktop

# Delete the Registry Key for all machine name specified in $RemoteMachine
Function DeleteRegistryKey($RemoteMachine)
{
 $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $RemoteMachine)

# connect to the needed key :  
 $regKey= $reg.OpenSubKey("System\\CurrentControlSet\\Control\\Terminal Server\\ClusterSettings", $true )

# and delete the SessionDirectoryRedirectionIP subkey, if it exists
 foreach ($key in $regKey.GetValueNames())
 { 
 if ($key -eq "SessionDirectoryRedirectionIP")
 {
 $regKey.DeleteValue($key)  
 Write-Host "Machine : "$RemoteMachine
 }
 }
}

# Get the list of collections on the machine
$RdSessionCollections = Get-RDSessionCollection  

if ($RdSessioncollections -eq $null)
{
 Write-Host "No RDSH Session Collections"
 return
}

foreach ($SessionCollection in $RdSessionCollections)
{
 Write-Host "Collection Name : " $SessionCollection.CollectionName

# get list of RDSH Servers in the collection
 $RdSessionHosts = Get-SessionHost -CollectionName $SessionCollection.CollectionName
 foreach ($SessionHost in $RdSessionHosts)
 {
 Write-Host "SessionHost : "$SessionHost.SessionHost

# Delete the regkey on this server
 DeleteRegistryKey($SessionHost.SessionHost)
 }
}