共用方式為


使用遠端工具來針對 Azure VM 問題進行疑難解答

適用於:✔️ Windows VM

當您針對 Azure 虛擬機 (VM) 的問題進行疑難解答時,您可以使用本文所討論的遠端工具,而不是使用遠端桌面通訊協定 (RDP) 連線到 VM。

序列主控台

使用適用於 Azure 虛擬機器 的序列主控台,在遠端 Azure VM 上執行命令。

遠端 CMD

下載 PsExec。 執行下列命令以連線到 VM:

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

注意

  • 命令必須在位於相同虛擬網路的計算機上執行。
  • DIP 或 HostName 可用來取代 <電腦>。
  • -s 參數可確保命令是使用系統帳戶 (系統管理員許可權) 叫用的。
  • PsExec 使用 TCP 連接埠 135 和 445。 因此,必須在防火牆上開啟這兩個埠。

執行命令

如需如何使用執行命令功能在 VM 上執行腳本的詳細資訊,請參閱 使用 run 命令在 Windows VM 中執行 PowerShell 腳本。

自訂指令碼擴充功能

您可以使用自定義腳本擴充功能,在目標 VM 上執行自定義腳本。 若要使用這項功能,必須符合下列條件:

  • VM 具有連線能力。

  • 已安裝 Azure 虛擬機器代理程式,並在 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

注意

TCP 連接埠 5986 (HTTPS) 必須開啟,才能使用此選項。

針對 Azure Resource Manager VM,您必須在網路安全組 (NSG) 上開啟埠 5986。 如需詳細資訊,請參閱安全組。

針對 RDFE VM,您必須擁有具有私人埠 (5986) 和公用埠的連接點。 然後,您也必須在 NSG 上開啟該公開埠。

設定客戶端電腦

若要使用 PowerShell 從遠端連線到 VM,您必須先設定用戶端電腦以允許連線。 若要這樣做,請視需要執行下列命令,將 VM 新增至 PowerShell 信任主機清單。

若要將一個 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,請先將 DNS 名稱新增至公用 IP 位址。 如需詳細步驟,請參閱在 Windows VM 的 Azure 入口網站 中建立完整域名。 然後,執行下列命令:

      $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
    

注意

設定 SkipCaCheck 旗標會略過在啟動工作階段時將憑證匯入 VM 的需求。

您也可以使用 Invoke-Command Cmdlet 從遠端在 VM 上執行腳本。

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

Remote Registry

注意

TCP 連接埠 135 或 445 必須開啟,才能使用此選項。

針對 Azure Resource Manager VM,您必須在 NSG 上開啟埠 5986。 如需詳細資訊,請參閱安全組。

針對 RDFE VM,您必須擁有具有私人埠 5986 和公用埠的連接點。 您也必須在 NSG 上開啟該公開埠。

  1. 從相同虛擬網路上的另一個 VM,開啟登錄編輯器 (regedit.exe)。

  2. 選取 [檔案>連線網络登錄]。

    線上網路登入的螢幕快照...註冊表編輯器的 [檔案] 選單中的選項

  3. 在 [輸入要選取的物件名稱] 方塊中輸入目標 VM,以依主機名動態IP尋找目標 VM。

    [選取計算機] 對話框中 [輸入要選取的物件名稱] 方塊的螢幕快照。

  4. 輸入目標 VM 的認證。

  5. 進行任何必要的登錄變更。

遠端服務主控台

注意

TCP 連接埠 135 或 445 必須開啟,才能使用此選項。

針對 Azure Resource Manager VM,您必須在 NSG 上開啟埠 5986。 如需詳細資訊,請參閱安全組。

針對 RDFE VM,您必須擁有具有私人埠 5986 和公用埠的連接點。 您也必須在 NSG 上開啟該公開埠。

  1. 從相同虛擬網路上的另一個 VM,開啟 Services.msc實例。

  2. 以滑鼠右鍵按兩下 [服務][本機]。

  3. 選取 [ 連接到另一部計算機]。

    [連接到另一部計算機] 選項的螢幕快照,其位於 [服務] (本機) 的右鍵功能表中。

  4. 輸入目標 VM 的動態 IP。

    [選取計算機] 對話框中 [另一部計算機] 選項中動態IP輸入方塊的螢幕快照。

  5. 對服務進行任何必要的變更。

下一步

  • 如需 Enter-PSSession Cmdlet 的詳細資訊,請參閱 Enter-PSSession
  • 如需使用傳統部署模型之 Windows 自定義腳本擴充功能的詳細資訊,請參閱 適用於 Windows 的自定義腳本擴充功能。
  • PsExec 是 PSTools 套件一部分。
  • 如需 PSTools 套件的詳細資訊,請參閱 PSTools

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。