リモート ツールを使用して Azure VM の問題をトラブルシューティングする

適用対象: ✔️ Windows VM

Azure 仮想マシン (VM) に関する問題をトラブルシューティングする場合、リモート デスクトップ プロトコル (RDP) を使用するのではなく、この記事で説明されているリモート ツールを使用して VM に接続できます。

シリアル コンソール

Azure Virtual Machines 用のシリアル コンソールを使用して、リモートの Azure VM でコマンドを実行します。

リモート CMD

PsExec をダウンロードします。 次のコマンドを実行して、VM に接続します。

psexec \\<computer>-u user -s cmd

Note

  • コマンドは、同じ仮想ネットワークにあるコンピューターで実行する必要があります。
  • DIP または HostName を使用して、 <コンピューター>を置き換えることができます。
  • -s パラメーターを指定すると、システム アカウント (管理者権限) を使用してコマンドが確実に呼び出されるようになります。
  • PsExec では TCP ポートの 135 と 445 を使用します。 そのため、2 つのポートをファイアウォールで開く必要があります。

コマンドの実行

実行コマンド機能を使用して VM でスクリプトを実行する方法の詳細については、「実行コマンドを使用して Windows VM で PowerShell スクリプトを実行する」を参照してください。

カスタム スクリプト拡張機能

カスタム スクリプト拡張機能を使用して、ターゲット VM でカスタム スクリプトを実行することができます。 この機能を使用するには、次の条件を満たす必要があります。

  • VM が接続されている。

  • Azure Virtual Machine Agent がインストールされており、VM で期待どおりに動作している。

  • VM にまだ拡張機能がインストールされていない。

    拡張機能では、初回使用時にのみ、スクリプトが挿入されます。 後でこの機能を使用する場合、拡張機能では、それが既に使用されていることが認識され、新しいスクリプトはアップロードされません。

スクリプトをストレージ アカウントにアップロードし、独自のコンテナーを生成します。 次に、VM に接続されているコンピューター上の Azure PowerShell で以下のスクリプトを実行します。

Azure Resource Manager VM の場合

#Set up the basic variables.
$subscriptionID = "<<SUBSCRIPTION ID>>"
$storageAccount = "<<STORAGE ACCOUNT>>"
$storageRG = "<<RESOURCE GROUP OF THE STORAGE ACCOUNT>>" 
$localScript = "<<FULL PATH OF THE PS1 FILE TO EXECUTE ON THE VM>>" 
$blobName = "file.ps1" #Name you want for the blob in the storage.
$vmName = "<<VM NAME>>" 
$vmResourceGroup = "<<RESOURCE GROUP>>"
$vmLocation = "<<DATACENTER>>" 
 
#Set up the Azure PowerShell module, and ensure the access to the subscription.
Login-AzAccount #Ensure login with the account associated with the subscription ID.
Get-AzSubscription -SubscriptionId $subscriptionID | Select-AzSubscription

#Set up the access to the storage account, and upload the script.
$storageKey = (Get-AzStorageAccountKey -ResourceGroupName $storageRG -Name $storageAccount).Value[0]
$context = New-AzureStorageContext -StorageAccountName $storageAccount -StorageAccountKey $storageKey
$container = "cse" + (Get-Date -Format yyyyMMddhhmmss)
New-AzureStorageContainer -Name $container -Permission Off -Context $context
Set-AzureStorageBlobContent -File $localScript -Container $container -Blob $blobName  -Context $context

#Push the script into the VM.
Set-AzVMCustomScriptExtension -Name "CustomScriptExtension" -ResourceGroupName $vmResourceGroup -VMName $vmName -Location $vmLocation -StorageAccountName $storageAccount -StorageAccountKey $storagekey -ContainerName $container -FileName $blobName -Run $blobName

リモート PowerShell

Note

このオプションを使用できるように、TCP ポート 5986 (HTTPS) を開く必要があります。

Azure Resource Manager VM の場合は、ネットワーク セキュリティ グループ (NSG) でポート 5986 を開く必要があります。 詳細については、「セキュリティ グループ」を参照してください。

RDFE VM の場合は、プライベート ポート (5986) とパブリック ポートがあるエンドポイントが必要です。 その後、NSG でそのパブリック側のポートを開く必要もあります。

クライアント コンピューターを設定する

PowerShell を使用して VM にリモート接続するには、まず、接続を許可するようにクライアント コンピューターを設定する必要があります。 これを行うには、必要に応じて、次のコマンドを実行して、VM を PowerShell の信頼されたホストの一覧に追加します。

信頼されたホスト一覧に 1 つの VM を追加する場合:

Set-Item wsman:\localhost\Client\TrustedHosts -value <ComputerName>

信頼されたホスト一覧に複数の VM を追加する場合:

Set-Item wsman:\localhost\Client\TrustedHosts -value <ComputerName1>,<ComputerName2>

信頼されたホスト一覧にすべてのコンピューターを追加する場合:

Set-Item wsman:\localhost\Client\TrustedHosts -value *

VM で RemotePS を有効にする

クラシック デプロイ モデルを使用して作成された VM の場合は、カスタム スクリプト拡張機能を使用して次のスクリプトを実行します。

Enable-PSRemoting -Force
New-NetFirewallRule -Name "Allow WinRM HTTPS" -DisplayName "WinRM HTTPS" -Enabled True -Profile Any -Action Allow -Direction Inbound -LocalPort 5986 -Protocol TCP
$thumbprint = (New-SelfSignedCertificate -DnsName $env:COMPUTERNAME -CertStoreLocation Cert:\LocalMachine\My).Thumbprint
$command = "winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname=""$env:computername""; CertificateThumbprint=""$thumbprint""}"
cmd.exe /C $command

Azure Resource Manager VM の場合は、ポータルから実行コマンドを使用して、EnableRemotePS スクリプトを実行します。

ポータルから EnableRemotePS スクリプトを実行する手順のスクリーンショット。

VM に接続します

クライアント コンピューターの場所に応じて、以下のコマンドを実行します。

  • 仮想ネットワークまたはデプロイの外部

    • クラシック デプロイ モデルを使用して作成された VM の場合は、次のコマンドを実行します。

      $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
      Enter-PSSession -ComputerName  "<<CLOUDSERVICENAME.cloudapp.net>>" -port "<<PUBLIC PORT NUMBER>>" -Credential (Get-Credential) -useSSL -SessionOption $Skip
      
    • Azure Resource Manager VM の場合は、最初にパブリック IP アドレスに DNS 名を追加します。 詳しい手順については、「Windows VM 用の Azure Portal での完全修飾ドメイン名の作成」を参照してください。 次に、次のコマンドを実行します。

      $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
      Enter-PSSession -ComputerName "<<DNSname.DataCenter.cloudapp.azure.com>>" -port "5986" -Credential (Get-Credential) -useSSL -SessionOption $Skip
      
  • 仮想ネットワークまたはデプロイ内で、次のコマンドを実行します。

    $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
    Enter-PSSession -ComputerName  "<<HOSTNAME>>" -port 5986 -Credential (Get-Credential) -useSSL -SessionOption $Skip
    

Note

SkipCaCheck フラグを設定すると、セッションを開始するときに VM に証明書をインポートする要件をバイパスできます。

Invoke-Command コマンドレットを使用して、VM でスクリプトをリモートで実行することもできます。

Invoke-Command -ComputerName "<<COMPUTERNAME>" -ScriptBlock {"<<SCRIPT BLOCK>>"}

リモート レジストリ

Note

このオプションを使用するには、TCP ポート 135 または 445 を開く必要があります。

Azure Resource Manager VM の場合は、NSG でポート 5986 を開く必要があります。 詳細については、「セキュリティ グループ」を参照してください。

RDFE VM の場合は、プライベート ポート 5986 とパブリック ポートがあるエンドポイントが必要です。 NSG でそのパブリック側のポートを開く必要もあります。

  1. 同じ仮想ネットワーク上の別の VM から、レジストリ エディター (regedit.exe) を開きます。

  2. [ファイル]>[Connect Network Registry]\(ネットワーク レジストリへの接続\) の順に選択します。

    ネットワーク レジストリの接続のスクリーンショット...レジストリ エディターの [ファイル] メニューのオプション

  3. [選択するオブジェクト名を入力してください] ボックスにホスト名または動的 IP (推奨) を入力して、ターゲット VM を検索します。

    [コンピューターの選択] ダイアログの [選択するオブジェクト名を入力する] ボックスのスクリーンショット。

  4. ターゲット VM の資格情報を入力します。

  5. すべての必要なレジストリ変更を行います。

リモート サービス コンソール

Note

このオプションを使用するには、TCP ポート 135 または 445 を開く必要があります。

Azure Resource Manager VM の場合は、NSG でポート 5986 を開く必要があります。 詳細については、「セキュリティ グループ」を参照してください。

RDFE VM の場合は、プライベート ポート 5986 とパブリック ポートがあるエンドポイントが必要です。 NSG でそのパブリック側のポートを開く必要もあります。

  1. 同じ仮想ネットワークの別の VM から、Services.msc のインスタンスを開きます。

  2. [サービス (ローカル)] を右クリックします。

  3. [Connect to another computer]\(別のコンピューターに接続\) を選択します。

    [サービス (ローカル)] の右クリック メニューの [別のコンピューターに接続] オプションのスクリーンショット。

  4. ターゲット VM の動的 IP アドレスを入力します。

    [コンピューターの選択] ダイアログの [別のコンピューター] オプションの [動的 IP 入力] ボックスのスクリーンショット。

  5. サービスに対してすべての必要な変更を行います。

次のステップ

  • Enter-PSSession コマンドレットの詳細については、Enter-PSSession を参照してください。
  • クラシック デプロイ モデルを使用した Windows のカスタム スクリプト拡張機能の詳細については、「Windows でのカスタムのスクリプト拡張機能」を参照してください。
  • PsExec は、PSTools スイートの一部です。
  • PSTools スイートの詳細については、PSTools に関するページを参照してください。

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

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