適用対象: ✔️ Windows VM
この記事では、Azure 仮想マシン (VM) への接続時にリモート デスクトップ サービス (TermService) が起動しないか起動に失敗する場合の問題のトラブルシューティングを行う方法について説明します。
現象
VM に接続しようとすると、次のシナリオが発生します。
VM のスクリーンショットに、完全に読み込まれ、資格情報を待機しているオペレーティング システムが表示されている。
イベント ビューアーを使用して、VM でイベント ログをリモートで表示します。 リモート デスクトップ サービス (TermService) が起動していないか、起動に失敗していることがわかります。 サンプル ログを以下に示します。
ログ名: System
Source: Service Control Manager
Date: 12/16/2017 11:19:36 AM
Event ID: 7022
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: vm.contoso.com
Description: Remote Desktop Services サービスは起動時にハングしました。次のクエリを実行して、これらのエラーを検索するシリアル アクセス コンソール機能を使用することもできます。
wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Service Control Manager'] and EventID=7022 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more
原因
この問題は、リモート デスクトップ サービスが VM で実行されていないために発生します。 原因は、次のどのシナリオかによって異なります。
- TermService サービスが無効に設定されている。
- TermService サービスがクラッシュする、または応答しない。
- 構成が適切でないため、TermService が起動しない。
ソリューション
この問題をトラブルシューティングするには、シリアル コンソールを使用します。 または、VM の OS ディスクを復旧 VM に接続して、VM をオフライン修復します。
シリアル コンソールの使用
[サポートとトラブルシューティング]>[シリアル コンソール] を選択して [シリアル コンソール] にアクセスします。 VM で機能が有効な場合、VM を正常に接続できます。
CMD インスタンス用の新しいチャネルを作成します。 「CMD」と入力してチャネルを開始し、チャネル名を取得します。
CMD インスタンスを実行しているチャネルに切り替えます。 この例では、チャネル 1 です。
ch -si 1
Enter キーをもう一度押し、VM の有効なユーザー名とパスワード (ローカルまたはドメイン ID) を入力します。
TermService サービスの状態についてクエリを実行します。
sc query TermService
サービス状態の表示が [停止済み] の場合は、サービスを開始してみてください。
sc start TermService
サービスが正常に開始されているかどうかを確認するために、サービスに対してもう一度クエリを実行します。
sc query TermService
サービスを開始できない場合、表示されたエラーに応じて解決策を実行します。
エラー 提案される解決策 5 - ACCESS DENIED アクセス拒否エラーによる TermService サービスの停止に関する記述を参照してください。 1053 - ERROR_SERVICE_REQUEST_TIMEOUT 「TermService サービスが無効化されている」を参照してください。 1058 - ERROR_SERVICE_DISABLED 「TermService サービスがクラッシュまたはハングする」を参照してください。 1059 - ERROR_CIRCULAR_DEPENDENCY 問題を迅速に解決するために、サポートにお問い合わせください。 1067 - ERROR_PROCESS_ABORTED 「TermService サービスがクラッシュまたはハングする」を参照してください。 1068 - ERROR_SERVICE_DEPENDENCY_FAIL 問題を迅速に解決するために、サポートにお問い合わせください。 1069 - ERROR_SERVICE_LOGON_FAILED 「TermService service fails because of logon failure」 (ログオンの失敗が原因で TermService サービスが失敗する) を参照してください 1070 - ERROR_SERVICE_START_HANG 「TermService サービスがクラッシュまたはハングする」を参照してください。 1077 - ERROR_SERVICE_NEVER_STARTED 「TermService サービスが無効化されている」を参照してください。 1079 - ERROR_DIFERENCE_SERVICE_ACCOUNT 問題を迅速に解決するために、サポートにお問い合わせください。 1753 問題を迅速に解決するために、サポートにお問い合わせください。
アクセス拒否の問題が原因で TermService サービスが停止する
シリアル コンソールに接続し、PowerShell インスタンスを開きます。
次のスクリプトを実行して、プロセス モニター ツールをダウンロードします。
remove-module psreadline $source = "https://download.sysinternals.com/files/ProcessMonitor.zip" $destination = "c:\temp\ProcessMonitor.zip" $wc = New-Object System.Net.WebClient $wc.DownloadFile($source,$destination)
ここで、procmon トレースを開始します。
procmon /Quiet /Minimized /BackingFile c:\temp\ProcMonTrace.PML
アクセス拒否の原因となっているサービスを開始して、問題を再現します。
sc start TermService
失敗した場合は、プロセス モニター トレースを終了します。
procmon /Terminate
c:\temp\ProcMonTrace.PML: というファイルを収集します。
- データ ディスクを VM に接続します。
- 新しいドライブにファイルをコピーできるシリアル コンソールを使用します。 たとえば、
copy C:\temp\ProcMonTrace.PML F:\
のようにします。 このコマンドの F は、接続されたデータ ディスクのドライブ文字です。 - データ ドライブを切断してから、プロセス モニターがインストールされている作業用 VM に接続します。
プロセス モニター (作業用 VM) を使用して、ProcMonTrace.PML を開きます。 次に、以下のスクリーンショットに示すように、Result is ACCESS DENIED でフィルター処理します。
出力されるレジストリ キー、フォルダー、ファイルを修正します。 通常、この問題は、サービスで使用されるサインイン アカウントに、これらのオブジェクトにアクセスするための ACL アクセス許可がない場合に発生します。 サインイン アカウントの適切な ACL アクセス許可は、正常な VM で確認できます。
TermService サービスが無効化されている
サービスを既定のスタートアップ値に復元します。
sc config TermService start= demand
サービスを開始します。
sc start TermService
その状態をもう一度クエリして、サービスが実行されていることを確認します。
sc query TermService
リモート デスクトップを使用して VM に接続してみます。
ログオンの失敗が原因で TermService サービスが失敗する
この問題は、このサービスの開始アカウントが変更された場合に発生します。 これを既定値に戻します。
sc config TermService obj= 'NT Authority\NetworkService'
サービスを開始します。
sc start TermService
リモート デスクトップを使用して VM に接続してみます。
TermService サービスがクラッシュまたはハングする
サービスの状態が開始中または停止中のままになっている場合は、サービスを停止してみてください。
sc stop TermService
サービスをそれ自体の 'svchost' コンテナーで切り離します。
sc config TermService type= own
サービスを開始します。
sc start TermService
それでもサービスを開始できない場合は、サポートにお問い合わせください。
VM をオフライン修復する
復旧 VM に OS ディスクを接続する
復旧 VM へのリモート デスクトップ接続を開始します。 接続したディスクが [ディスクの管理] コンソールで [オンライン] になっていることを確認します。 接続された OS ディスクに割り当てられたドライブ文字をメモします。
管理者特権でのコマンド プロンプト インスタンス ([管理者として実行]) を開きます。 次に、以下のスクリプトを実行します。 接続された OS ディスクに割り当てられたドライブ文字が F であると仮定します。これを、ご利用の VM の適切な値に置き換えます。
reg load HKLM\BROKENSYSTEM F:\windows\system32\config\SYSTEM REM Set default values back on the broken service reg add "HKLM\BROKENSYSTEM\ControlSet001\services\TermService" /v start /t REG_DWORD /d 3 /f reg add "HKLM\BROKENSYSTEM\ControlSet001\services\TermService" /v ObjectName /t REG_SZ /d "NT Authority\NetworkService“ /f reg add "HKLM\BROKENSYSTEM\ControlSet001\services\TermService" /v type /t REG_DWORD /d 16 /f reg add "HKLM\BROKENSYSTEM\ControlSet002\services\TermService" /v start /t REG_DWORD /d 3 /f reg add "HKLM\BROKENSYSTEM\ControlSet002\services\TermService" /v ObjectName /t REG_SZ /d "NT Authority\NetworkService" /f reg add "HKLM\BROKENSYSTEM\ControlSet002\services\TermService" /v type /t REG_DWORD /d 16 /f
OS ディスクを切断して、VM を再作成します。 その後、問題が解決されているかどうかを確認します。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。