本文將引導您了解您的 Azure DevTest Labs 虛擬機器 (VM) 資源上成品失敗的可能原因和疑難排解步驟。
工件是可在建立 VM 期間或之後於實驗室 VM 上安裝的工具、動作或軟體。 實驗室擁有者可以在建立時預先選取要套用至所有實驗室 VM 的必要成品,而實驗室使用者可以將成品套用至他們所擁有的 VM。 有數個可能的問題可能會導致成品無法安裝並套用至實驗室,或在實驗室 VM 上正確執行。
當成品似乎停止回應時,第一個步驟是嘗試判斷流程停滯的原因。 成品安裝可能會在初始要求期間被封鎖,或在要求執行期間失敗。 您可以從 Azure 入口網站或發生成品失敗的 VM 對成品失敗進行疑難排解。
在 Azure 入口網站中進行疑難排解
如果成品未成功套用至您的實驗室 VM,您可以從在 Azure 入口網站中調查 VM 的狀態開始。 您可以找到 VM 狀態的相關資訊、確認其正在執行,然後確認可以套用成品。 實驗室 VM 的活動記錄資料會顯示有關安裝流程的項目。 您可以檢查項目,以尋找成品失敗的相關資訊。
檢查 VM 狀態
完成下列步驟來檢查 Azure 入口網站中的 VM 狀態:
移至 DevTest Labs 實驗室 VM 的 [ 概觀 ] 頁面,並確認計算機狀態為 [執行中]:
選取 構件 以開啟實驗室 VM 的構件清單:
檢查 [ 套用成品 ] 選項,並確認實驗室 VM 已準備好接受已套用的成品:
當 套用工件 選項顯示為暗灰色時,您無法將工件套用至實驗室 VM,並且會在頁面上看到通知訊息。
使用 PowerShell 命令
您也可以使用 Azure PowerShell 來檢查您的實驗室 VM 是否可以接收套用的成品。
下列 GET 命令會傳回值為 True 或 False 的 canApplyArtifacts 旗標。 若要執行命令,請將 $SubscriptionId 參數替換為您的訂用帳戶標識碼,將 $LabName/$VmName 參數替換為您的實驗室名稱和 VM 名稱,並將 $LabRgName 參數替換為您的實驗室資源組名稱。
Select-AzSubscription -SubscriptionId $SubscriptionId | Out-Null
$vm = Get-AzResource `
-Name "$LabName/$VmName" `
-ResourceGroupName $LabRgName `
-ResourceType 'microsoft.devtestlab/labs/virtualmachines' `
-ApiVersion '2018-10-15-preview' `
-ODataQuery '$expand=Properties($expand=ComputeVm)'
$vm.Properties.canApplyArtifacts
調查失敗的成品詳細資料
成品可能會停止回應,且最後在實驗室 VM 的成品清單中顯示為「失敗」。
完成下列步驟來調查失敗的成品:
檢查活動記錄
為了安裝成品,DevTest Labs 會建立及部署 Azure Resource Manager (ARM) 範本,以要求使用自訂指令碼延伸模組 (CSE)。 此等級的錯誤會顯示在訂用帳戶和包含實驗室 VM 之資源群組的 [活動記錄] 中。
Note
當您檢視 [活動記錄] 時,可能需要展開安裝流程項目,以查看失敗錯誤摘要。
透過完成以下步驟來檢查活動記錄項目中是否存在與實驗室 VM 上的成品的安裝或套用相關的失敗問題:
進入實驗室 VM 的活動記錄頁面,並找出狀態為失敗的項目:
選取項目以開啟詳細資料窗格並檢視記錄資訊:
如果您正在嘗試將成品直接套用至實驗室 VM,請尋找與 [建立或更新虛擬機器擴充功能] 安裝流程相關的失敗錯誤。
如果您是建立 VM 並在流程期間套用成品,請尋找針對 [建立或更新虛擬機器] 安裝流程回報的失敗錯誤。
窗格的標題與項目標題相對應,例如,將成品套用至虛擬機器:
在詳細資料窗格上,選取 [JSON] 來檢閱 JSON 承載的內容。 您可以在 JSON 文件的結尾看到錯誤:
調查成品存放庫和實驗室儲存體帳戶
當 DevTest Labs 套用成品時,它會從連線的存放庫讀取成品組態和檔案。 如果成品無法安裝或套用至您的實驗室 VM,問題可能與存放庫存取有關。
根據預設,DevTest Labs 可存取 DevTest Labs 公用成品存放庫。 您也可以將實驗室連線到私人存放庫,以存取自訂成品。 視設定而定,實驗室 VM 可能無法直接存取成品存放庫。 DevTest Labs 會快取實驗室儲存體帳戶中第一次初始化實驗室時已建立的成品。
如果自訂成品無法安裝,請確定私人存放庫的個人存取權杖 (PAT) 尚未過期。 如果 PAT 已過期,則不會將成品列出,而且參考來自該存放庫之成品的任何指令碼都會失敗。
如果記憶體帳戶的存取遭到封鎖,您可能會看到類似以下的錯誤:
CSE Error: Failed to download all specified files. Exiting. Exception: Microsoft.WindowsAzure.Storage.StorageException: The remote server returned an error: (403) Forbidden. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.例如,當流量從 VM 封鎖至 Azure 記憶體服務時,您可能會遇到此錯誤。 錯誤會出現在實驗室 VM 資源群組的 [活動記錄] 中。
完成下列步驟來識別 Azure 記憶體帳戶的存放庫連線問題:
檢查是否已新增網路安全性群組 (NSG)。 如果已新增訂用帳戶原則以在所有虛擬網路中自動設定 NSG,其可能會影響用來建立實驗室 VM 的虛擬網路。
確認所有 NSG 規則:
使用 IP 流量驗證 來判斷 NSG 規則是否封鎖流量或是從 VM 封鎖流量。
檢閱作用中的安全性群組規則,以確保輸入 [允許] NSG 規則存在。 如需詳細資訊,請參閱使用有效安全性規則對 VM 流量流程進行疑難排解。
檢查實驗室的預設儲存體帳戶。
預設儲存體帳戶是實驗室建立期間建立的第一個儲存體帳戶。 名稱通常會以字母 「a」 開頭,並以多位數數字結尾:
a<labname>#。移至 DevTest Labs 實驗室的 [ 概觀 ] 頁面,然後選取 [資源可視化檢視]。
在圖表中,找出名稱符合所述命名慣例 (
a<labname>#) 的 [儲存體帳戶]。將滑鼠指標放在 記憶體帳戶 資源上方,將指標移至 i 圖示以查看快捷功能表,然後選取 [ 檢視]:
在記憶體帳戶 [概 觀 ] 頁面上,展開左側功能表上的 [ 安全性 + 網络] 區段,然後選取 [ 網络] :
在 [防火牆與虛擬網路] 索引標籤上,檢查 [公用網路存取] 選項的設定:
如果選擇了[從選取的虛擬網絡和 IP 位址啟用],請確認允許的 IP 位址清單顯示可用於建立實驗室 VM 的實驗室虛擬網絡:
否則,請確認已選取 [從所有網路啟用]:
如需深入的疑難排解,請參閱 設定 Azure 儲存體防火牆和虛擬網路。
針對實驗室機器進行疑難排解
您可以連線到發生成品失敗的實驗室 VM 並調查問題。
檢查 CSE 記錄檔
完成下列步驟,以檢視 Windows VM 的 CSE 記錄檔:
連線到執行中的 DevTest Labs 實驗室 VM。
在 [檔案總管] 中,移至 C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\<CSE version>\Status\。 <CSE version> 的其中一個範例是
1.10.12。
開啟並檢查 STATUS 檔案,例如 1.status,以檢視錯誤。
如需在Linux VM上尋找記錄檔的指示,請參閱 搭配Linux虛擬機使用 Azure CSE 第 2 版。
檢查 Azure 虛擬機器代理程式
請確定實驗室 VM 的 Azure 虛擬機代理程式(VM 代理程式) 已安裝並就緒。
實驗室 VM 第一次啟動時,或 CSE 第一次安裝以處理套用成品的要求時,實驗室 VM 可能會需要升級 VM 代理程式,或等候 VM 代理程式初始化。 VM 代理程式可能會需要很長的時間才能初始化所相依的服務。
藉由完成下列步驟,判斷 VM 代理程式是否導致成品停止回應:
連線到執行中的 DevTest Labs 實驗室 VM。
在 [檔案總管] 中,移至包含實驗室 VM 記錄檔的資料夾,例如 C:\WindowsAzure\logs。
開啟 WaAppAgent.log 檔案。
在記錄檔中,尋找顯示 VM 代理程式啟動、完成初始化,以及傳送第一個活動訊號的項目。 掃描項目以尋找您遇到成品問題之時間點的時間戳記。 下列程式碼片段顯示記錄檔中的一些範例項目:
[00000006] [11/14/2019 05:52:13.44] [INFO] WindowsAzureGuestAgent starting. Version 2.7.41491.949 ... [00000006] [11/14/2019 05:52:31.77] [WARN] Waiting for OOBE to Complete ... ... [00000006] [11/14/2019 06:02:30.43] [WARN] Waiting for OOBE to Complete ... [00000006] [11/14/2019 06:02:33.43] [INFO] StateExecutor initialization completed. [00000020] [11/14/2019 06:02:33.43] [HEART] WindowsAzureGuestAgent Heartbeat.在此範例中,VM 代理程式花費 10 分鐘又 20 秒才啟動。 延遲發生的原因是因為初次執行體驗 (OOBE) 服務啟動時間過長。 VM 代理程式較長的啟動時間導致成品停止回應。
如需有關虛擬機器擴充功能的一般資訊,請參閱 Azure 虛擬機器延伸模組和功能。 如需更多疑難排解構想,請參閱 Azure 虛擬機器代理程式概觀。
調查指令碼問題
成品安裝可能會失敗的另一個原因是成品安裝腳本的撰寫方式。
以下是一些潛在指令碼問題的範例:
指令碼具有必要參數,但在指令碼執行期間未傳遞預期的值。 如果允許使用者將預期的參數保留空白,且未在 artifactfile.json 定義檔案中指定預設值,就可能發生此案例。 結果是指令碼會停止回應,因為其正在等候使用者輸入。 當指令碼要求參數值時,最佳做法是定義預設值,並要求使用者輸入值。
指令碼在指令碼執行期間要求使用者動作。 如果等待使用者採取動作時,指令碼執行出現長時間的延遲,就可能發生此案例。 撰寫可以靜默運行且不需要使用者介入的腳本是良好的作法。
藉由完成下列步驟,判斷腳本是否導致成品停止回應:
連線到執行中的 DevTest Labs 實驗室 VM。
開啟 [檔案總管]。
移至具有 VM 成品安裝指令碼的 [Download] 資料夾,例如 C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\<CSE version>\Downloads\。 <CSE version> 的其中一個範例是
1.10.12。針對後續步驟,您可以使用此資料夾中的腳稿,或將腳本複製到 VM 上的工作資料夾。
在 VM 上以系統管理權限開啟命令提示字元視窗。
在該命令提示字元視窗中執行成品安裝指令碼。
遵循指令碼提示並輸入必要的參數值。 若要調查缺少使用者輸入或延遲的使用者動作是否會造成問題,請嘗試重現特定行為。
判斷指令碼是否示範非預期或有問題的行為。
視需要更正實驗室 VM 上的腳本,然後再次執行腳本,以確認問題已解決。
檢查成品結構
自訂成品必須具有適當結構。 務必確認成品安裝指令碼中的自訂成品會實作正確的結構。 下列資源提供可協助您完成此檢查的資訊:
要求腳本更新
您可以針對 DevTest Labs公用存放庫所裝載的成品提交建議的指令碼修正。 如需詳細資訊,請參閱 [自述] 檔中的 [貢獻] 一節。
Get support
如果您需要更多協助,請嘗試下列其中一個支援通道:
搜尋 Microsoft社群 資源以取得 Azure DevTest Labs 的相關信息,並檢視 Stack Overflow 上的文章。
連線至 @AzureSupport,這是用來改善客戶體驗的官方 Microsoft Azure 帳戶。 Azure 支援會將 Azure 社群連線到解答、支援及專家。
Related content
- 針對 Azure DevTest Labs 中的虛擬機器部署失敗進行疑難排解 (部分機器翻譯)
- 測試參數類型成品 (英文)


![失敗成品詳細資料的螢幕擷取畫面,其中包括 [部署訊息] 和 [延伸模組訊息] 資訊。](media/devtest-lab-troubleshoot-apply-artifacts/failed-artifact-details.png)

![顯示如何檢視失敗成品 [活動記錄] 項目之 JSON 詳細資料的螢幕擷取畫面。](media/devtest-lab-troubleshoot-apply-artifacts/failed-artifact-entry-json.png)
![顯示如何選取 DevTest Labs 實驗室資源之儲存體帳戶 [檢視] 選項的螢幕擷取畫面。](media/devtest-lab-troubleshoot-apply-artifacts/select-storage-account.png)
![顯示如何檢視 DevTest Labs 實驗室資源儲存體帳戶之 [網路] 設定的螢幕擷取畫面。](media/devtest-lab-troubleshoot-apply-artifacts/storage-account-networking.png)