共用方式為


使用動作「執行命令」在 Windows VM 中執行指令碼

「執行命令」功能會使用虛擬機器 (VM) 代理程式在 Azure Windows VM 中執行 PowerShell 指令碼。 您可以使用這些指令碼,進行一般電腦或應用程式管理。 這些指令碼能協助快速診斷和修復 VM 存取與網路問題,並讓 VM 恢復正常狀態。

優點

您有多種方式可存取虛擬機器。 執行命令可以使用虛擬機器代理程式,在虛擬機器上遠端執行指令碼。 您可以透過 Azure 入口網站、REST APIPowerShell,執行「執行命令」。

這項功能在您想要在虛擬機器中執行指令碼的所有情況下都很有用。 這是唯一能夠疑難排解和修復因網路或管理使用者設定不當,而未開啟 RDP 或 SSH 連接埠的虛擬機器方法。

先決條件

支援的 Windows 作業系統

操作系統版本 x64 ARM64
Windows 10 支援 支援
Windows 11 支援 支援
Windows 伺服器 2016 支援 支援
Windows Server 2016 核心 支援 支援
Windows 伺服器 2019 支援 支援
Windows Server 2019 核心 支援 支援
Windows 伺服器 2022 支援 支援
Windows Server 2022 核心 支援 支援
Windows Server 2022 Azure 版本 支援 支援
Windows 伺服器 2025 支援 支援
Windows Server 2025 核心版 支援 支援
Windows Server 2025 Azure 版本 支援 支援

限制

當使用執行命令時,會有下列限制:

  • 輸出僅限於最後 4,096 個位元組。
  • 執行指令碼的最短時間是大約 20 秒。
  • 在 Windows 上以系統身分執行指令碼。
  • 一次可執行一個指令碼。
  • 不支援提示資訊 (互動模式) 的指令碼。
  • 您無法取消正在執行的指令碼。
  • 指令碼可以執行的最長時間是 90 分鐘。 經過這段時間後會逾時。
  • 需要有虛擬機器的輸出連線,才能傳回指令碼結果。
  • 不建議執行會導致 VM 代理程式停止或更新的指令碼。 這可能會讓延伸模組處於 [轉換中] 狀態,進而導致逾時。

附註

執行命令需要連線 (連接埠 443) 到 Azure 公用 IP 位址,才能正常運作。 如果延伸模組無法存取這些端點,指令碼可能會執行成功,但不會傳回結果。 如果要封鎖虛擬機器上的流量,您可使用服務標籤,以利用 AzureCloud 標籤允許送往 Azure 公用 IP 位址的流量。

如果 VM 代理程式狀態為 [未就緒],則「執行命令」功能無法運作。 在 Azure 入口網站的 VM 屬性中,檢查代理程式狀態。

可用的命令

下表顯示 Windows 虛擬機器可用命令的清單。 您可以使用 RunPowerShellScript 命令,來執行您想要的任何自訂指令碼。 當使用 Azure CLI 或 PowerShell 執行命令時,您為 --command-id-CommandId 參數所提供值必須是下列值的其中之一。 如果您指定的值不是可用命令,就會收到此錯誤:

The entity was not found in this Azure location

可用的命令

CommandID 說明 其他資訊
RunPowerShellScript 執行 PowerShell 指令碼
DisableNLA 停用網路層級驗證 (NLA)。 腳本完成之後,您必須重新啟動 VM,變更才會生效。 腳本本身不會重新啟動 VM。 readme
DisableWindowsUpdate 透過 Windows Update 停用自動更新。 readme
EnableAdminAccount 檢查本機系統管理員帳戶是否已停用,如果是的話,請加以啟用。 readme
EnableEMS 啟用緊急管理服務(EMS),以便在故障排除的情況下允許建立序列控制台連線。 readme
EnableRemotePS 啟用遠端 PowerShell。 readme
EnableWindowsUpdate 透過 Windows Update 啟用自動更新。 readme
IMDSCertCheck 檢查 IMDS 健康情況,然後分析 IMDS 所相依目前安裝的憑證。 如果遺失,則會顯示其他詳細數據和風險降低步驟。 readme
IPConfig 針對系結至 TCP/IP 的每個適配卡,顯示 IP 位址、子網掩碼和預設網關的詳細資訊。 如需使用方式,請參閱 執行腳本 readme
RDPSettings 檢查登錄設定和網域原則設定。 如果機器是網域的一部分,或將設定修改為預設值,則建議採取政策措施。 readme
ResetRDPCert 拿掉系結至 RDP 接聽程式的 SSL 憑證,並將 RDP 接聽程式安全性還原為預設值。 如果您發現憑證有任何問題,請使用此指令碼。 readme
SetRDPPort 設定遠端桌面連線的預設或使用者指定埠號碼。 對於連接埠的輸入存取,啟用防火牆規則。 readme
WindowsActivationValidation 檢查目前的 Windows 授權狀態(已啟動或未啟動),如果計算機未啟用屬性,就會產生警示。 readme
WindowsGhostedNicValidationScript 此指令碼會掃描 Windows 登錄中 PCI 與 VMBUS 匯流排上的網路介面卡、與目前使用中的網路介面卡比較,並識別準刪除的 NIC。 對於排除網路問題或清理舊網卡很有用。 readme
WindowsUpgradeAssessmentValidation 此腳本旨在評估 Windows 機器(用戶端或伺服器)對原地作業系統升級的準備程度,特別針對 Azure 虛擬機。 它評估作業系統版本、支援的升級路徑、系統磁碟空間,以及 Azure 的安全功能,如 Trusted Launch、Secure Boot 和 vTPM。 readme

限制於執行命令的存取

列出執行命令或顯示命令詳細資料需要訂閱層級的 Microsoft.Compute/locations/runCommands/read 權限。 內建讀者角色和具有此權限的較高層級。

執行命令需要有 Microsoft.Compute/virtualMachines/runCommand/action 權限。 虛擬機器參與者角色和具有此權限的較高層級。

您可使用其中一個內建角色或建立自訂角色,以使用 [執行] 命令。

使用 Run 指令

附註

  • 參數值只能是字串類型,而且指令碼會負責視需要將其轉換成其他類型。
  • 根據執行所使用的模式,可能需要進行一些跳脫處理。 例如,如果您在 PowerShell 工作階段中執行命令,則指令檔的路徑需要有引號。
  • 內建命令是無法編輯的。

前往 Azure 入口網站中的 VM,並在 [作業] 下,從左側功能表選取 [執行命令]。 您會看到可在 VM 上執行的可用命令清單。

命令清單

選擇要執行的命令。 有些命令可能有選擇性或必要的輸入參數。 對於這些命令,參數會顯示為文字欄位,以供提供輸入值。 您可展開 [檢視指令碼] 來檢視每個命令正在執行的指令碼。 RunPowerShellScript 不同於其他命令,因為它可讓您提供您自己的自訂指令碼。

選擇命令之後,請選取 [執行] 以執行指令碼。 指令碼完成後,會在輸出視窗中傳回輸出和任何錯誤。 下列螢幕擷取畫面顯示執行 RDPSettings 命令的範例輸出。

執行命令指令碼輸出

動作執行命令 Windows 疑難解答

針對 Windows 環境的動作執行命令進行疑難解答時,請參閱 RunCommandExtension 記錄檔 (其通常位於下列目錄中:C:\WindowsAzure\Logs\Plugins\Microsoft.CPlat.Core.RunCommandWindows\<version>\RunCommandExtension.log) 以取得進一步的詳細資料。

已知問題

  • 如果命令包含保留字元,您的動作執行命令延伸模組可能無法在 Windows 環境中執行。 例如:

    如果 & 符號是在命令的參數中傳遞 (例如下列 PowerShell 指令碼),它可能會失敗。

    $paramm='abc&jj'
    Invoke-AzVMRunCommand -ResourceGroupName AzureCloudService1 -Name test -CommandId 'RunPowerShellScript' -ScriptPath     C:\data\228332902\PostAppConfig.ps1 -Parameter @{"Prefix" = $paramm}
    

    使用 ^ 字元逸出引數中的 &,例如 $paramm='abc^&jj'

  • 如果要執行的命令於路徑中包含「\n」命令,執行命令延伸模組也可能無法執行,因為它會被視為新行。 例如,C:\Windows\notepad.exe 於檔案路徑中包含 \n。 請考慮於路徑中以 \n 取代 \N

  • 請確定您在登錄機碼 HKLM\SOFTWARE\Microsoft\Command Processor\AutoRun 中沒有任何自訂設定 (詳情在此處)。 這可能會在 RunCommand 延伸模組安裝或啟用階段期間觸發,並導致「XYZ 無法辨識為內部或外部命令、可操作的程式或批次檔」之類的錯誤。

的動作執行命令移除

如果您需要移除動作執行命令 Windows 延伸模組,請參閱 Azure PowerShell 和 CLI 的下列步驟:

使用下列移除範例中的相關資源群組名稱和虛擬器機名稱取代 rgnamevmname

 Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandWindowsExtension'

附註

當您再次套用執行命令時,會自動安裝延伸模組。 您可以使用延伸模組移除命令,針對與延伸模組相關的任何問題進行疑難排解。

後續步驟

若要了解在虛擬機器中遠端執行指令碼和命令的其他方式,請參閱在 Windows 虛擬機器中執行指令碼