「執行命令」功能會使用虛擬機器 (VM) 代理程式在 Azure Windows VM 中執行 PowerShell 指令碼。 您可以使用這些指令碼,進行一般電腦或應用程式管理。 這些指令碼能協助快速診斷和修復 VM 存取與網路問題,並讓 VM 恢復正常狀態。
優點
您有多種方式可存取虛擬機器。 執行命令可以使用虛擬機器代理程式,在虛擬機器上遠端執行指令碼。 您可以透過 Azure 入口網站、REST API 或 PowerShell,執行「執行命令」。
這項功能在您想要在虛擬機器中執行指令碼的所有情況下都很有用。 這是唯一能夠疑難排解和修復因網路或管理使用者設定不當,而未開啟 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 的下列步驟:
使用下列移除範例中的相關資源群組名稱和虛擬器機名稱取代 rgname 和 vmname。
Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandWindowsExtension'
附註
當您再次套用執行命令時,會自動安裝延伸模組。 您可以使用延伸模組移除命令,針對與延伸模組相關的任何問題進行疑難排解。
後續步驟
若要了解在虛擬機器中遠端執行指令碼和命令的其他方式,請參閱在 Windows 虛擬機器中執行指令碼。