次の方法で共有


Azure VM でリモート デスクトップ サービスが起動しない

適用対象: ✔️ 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 をオフライン修復します。

シリアル コンソールの使用

  1. [サポートとトラブルシューティング]>[シリアル コンソール] を選択して [シリアル コンソール] にアクセスします。 VM で機能が有効な場合、VM を正常に接続できます。

  2. CMD インスタンス用の新しいチャネルを作成します。 「CMD」と入力してチャネルを開始し、チャネル名を取得します。

  3. CMD インスタンスを実行しているチャネルに切り替えます。 この例では、チャネル 1 です。

    ch -si 1
    
  4. Enter キーをもう一度押し、VM の有効なユーザー名とパスワード (ローカルまたはドメイン ID) を入力します。

  5. TermService サービスの状態についてクエリを実行します。

    sc query TermService
    
  6. サービス状態の表示が [停止済み] の場合は、サービスを開始してみてください。

    sc start TermService
    
  7. サービスが正常に開始されているかどうかを確認するために、サービスに対してもう一度クエリを実行します。

    sc query TermService
    
  8. サービスを開始できない場合、表示されたエラーに応じて解決策を実行します。

    エラー 提案される解決策
    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 サービスが停止する

  1. シリアル コンソールに接続し、PowerShell インスタンスを開きます。

  2. 次のスクリプトを実行して、プロセス モニター ツールをダウンロードします。

    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) 
    
  3. ここで、procmon トレースを開始します。

    procmon /Quiet /Minimized /BackingFile c:\temp\ProcMonTrace.PML 
    
  4. アクセス拒否の原因となっているサービスを開始して、問題を再現します。

    sc start TermService 
    

    失敗した場合は、プロセス モニター トレースを終了します。

    procmon /Terminate 
    
  5. c:\temp\ProcMonTrace.PML: というファイルを収集します。

    1. データ ディスクを VM に接続します
    2. 新しいドライブにファイルをコピーできるシリアル コンソールを使用します。 たとえば、copy C:\temp\ProcMonTrace.PML F:\ のようにします。 このコマンドの F は、接続されたデータ ディスクのドライブ文字です。
    3. データ ドライブを切断してから、プロセス モニターがインストールされている作業用 VM に接続します。
  6. プロセス モニター (作業用 VM) を使用して、ProcMonTrace.PML を開きます。 次に、以下のスクリーンショットに示すように、Result is ACCESS DENIED でフィルター処理します。

    [プロセス モニター フィルター] ウィンドウでの結果によるフィルター処理のスクリーンショット。

  7. 出力されるレジストリ キー、フォルダー、ファイルを修正します。 通常、この問題は、サービスで使用されるサインイン アカウントに、これらのオブジェクトにアクセスするための ACL アクセス許可がない場合に発生します。 サインイン アカウントの適切な ACL アクセス許可は、正常な VM で確認できます。

TermService サービスが無効化されている

  1. サービスを既定のスタートアップ値に復元します。

    sc config TermService start= demand 
    
  2. サービスを開始します。

    sc start TermService
    
  3. その状態をもう一度クエリして、サービスが実行されていることを確認します。

    sc query TermService 
    
  4. リモート デスクトップを使用して VM に接続してみます。

ログオンの失敗が原因で TermService サービスが失敗する

  1. この問題は、このサービスの開始アカウントが変更された場合に発生します。 これを既定値に戻します。

    sc config TermService obj= 'NT Authority\NetworkService'
    
  2. サービスを開始します。

    sc start TermService
    
  3. リモート デスクトップを使用して VM に接続してみます。

TermService サービスがクラッシュまたはハングする

  1. サービスの状態が開始中または停止中のままになっている場合は、サービスを停止してみてください。

    sc stop TermService
    
  2. サービスをそれ自体の 'svchost' コンテナーで切り離します。

    sc config TermService type= own
    
  3. サービスを開始します。

    sc start TermService
    
  4. それでもサービスを開始できない場合は、サポートにお問い合わせください。

VM をオフライン修復する

復旧 VM に OS ディスクを接続する

  1. 復旧 VM に OS ディスクを接続します

  2. 復旧 VM へのリモート デスクトップ接続を開始します。 接続したディスクが [ディスクの管理] コンソールで [オンライン] になっていることを確認します。 接続された OS ディスクに割り当てられたドライブ文字をメモします。

  3. 管理者特権でのコマンド プロンプト インスタンス ([管理者として実行]) を開きます。 次に、以下のスクリプトを実行します。 接続された 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
    
  4. OS ディスクを切断して、VM を再作成します。 その後、問題が解決されているかどうかを確認します。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。