針對 Azure 自動化狀態設定的問題進行疑難排解
本文探討如何診斷並解決您在 Azure 自動化狀態設定中編譯或部署設定時發生的問題。 如需狀態設定功能的一般資訊,請參閱 Azure 自動化狀態設定概觀。
診斷問題
發生設定方面的編譯或部署錯誤時,以下幾個步驟可協助您診斷問題。
1.確定您的設定在本機電腦上成功編譯
Azure 自動化狀態設定以 PowerShell Desired State Configuration (DSC) 為基礎。 您可以在 PowerShell DSC 中找到 DSC 語言和語法的文件。
您可以在本機電腦上編譯 DSC 設定,以探索並解決常見的錯誤,例如:
- 遺失模組。
- 語法錯誤。
- 邏輯錯誤。
2.在節點上檢視 DSC 記錄
如果您的設定成功編譯,但套用至節點後失敗,您可以在 DSC 記錄中找到詳細資訊。 如需哪裡可找到這些記錄的詳細資訊,請參閱 DSC 事件記錄位於何處。
xDscDiagnostics 模組可協助您剖析來自 DSC 記錄的詳細資訊。 如果您連絡支援人員,他們會需要這些記錄來診斷您的問題。
您可以遵循安裝穩定版模組中的指示,在本機電腦上安裝 xDscDiagnostics
模組。
若要在 Azure 電腦上安裝 xDscDiagnostics
模組,請使用 Invoke-AzVMRunCommand。 您也可以遵循使用執行命令在 Windows VM 中執行 PowerShell 指令碼中的步驟,在 Azure 入口網站中使用 [執行命令] 選項。
如需使用 xDscDiagnostics 的詳細資訊,請參閱使用 xDscDiagnostics 分析 DSC 記錄。 另請參閱 xDscDiagnostics Cmdlet。
3.確認節點和自動化工作區具有必要的模組
DSC 依賴節點上安裝的模組。 當您使用 Azure 自動化狀態設定時,請遵循匯入模組中的步驟,將任何必要的模組匯入到您的自動化帳戶。 設定也可能相依於特定版本的模組。 如需詳細資訊,請參閱針對模組進行疑難排解。
案例:無法從入口網站刪除含有特殊字元的設定
問題
當您嘗試從入口網站刪除 DSC 設定時,您看到下列錯誤:
An error occurred while deleting the DSC configuration '<name>'. Error-details: The argument configurationName with the value <name> is not valid. Valid configuration names can contain only letters, numbers, and underscores. The name must start with a letter. The length of the name must be between 1 and 64 characters.
原因
此錯誤是暫時性問題,已規劃要解決。
解決方法
使用 Remove-AzAutomationDscConfiguration Cmdlet 來刪除設定。
案例:無法註冊 DSC 代理程式
問題
執行 Set-DscLocalConfigurationManager 或另一個 DSC Cmdlet 時,您收到錯誤:
Registration of the Dsc Agent with the server
https://<location>-agentservice-prod-1.azure-automation.net/accounts/00000000-0000-0000-0000-000000000000 failed. The
underlying error is: Failed to register Dsc Agent with AgentId 00000000-0000-0000-0000-000000000000 with the server htt
ps://<location>-agentservice-prod-1.azure-automation.net/accounts/00000000-0000-0000-0000-000000000000/Nodes(AgentId='00000000-0000-0000-0000-000000000000'). .
+ CategoryInfo : InvalidResult: (root/Microsoft/...gurationManager:String) [], CimException
+ FullyQualifiedErrorId : RegisterDscAgentCommandFailed,Microsoft.PowerShell.DesiredStateConfiguration.Commands.Re
gisterDscAgentCommand
+ PSComputerName : <computerName>
原因
此錯誤通常起因於防火牆、位於 Proxy 伺服器後方的電腦或其他網路錯誤。
解決方法
請確認電腦可存取 DSC 的適當端點,然後再試一次。 關於所需的連接埠和位址清單,請參閱網路規劃。
案例:狀態報告傳回「未經授權」回應碼
問題
當您向「Azure 自動化狀態設定」註冊節點時,您收到下列其中一個錯誤訊息:
The attempt to send status report to the server https://{your Automation account URL}/accounts/xxxxxxxxxxxxxxxxxxxxxx/Nodes(AgentId='xxxxxxxxxxxxxxxxxxxxxxxxx')/SendReport returned unexpected response code Unauthorized.
VM has reported a failure when processing extension 'Microsoft.Powershell.DSC / Registration of the Dsc Agent with the server failed.
原因
可能原因如下:
不正確或過期的憑證。 請參閱重新註冊節點。
不允許存取 *.azure-automation.net 的 Proxy 設定。 如需詳細資訊,請參閱私人網路的設定。
用戶端電腦時間與實際時間有好幾分鐘的差距。 (若要檢查時間,請使用:w32tm /stripchart /computer:time.windows.com /samples:6)。
解決方法
使用下列步驟來重新註冊失敗的 DSC 節點。
步驟 1:取消註冊節點
- 在 Azure 入口網站中,移至 [首頁]>[自動化帳戶]> (您的自動化帳戶) > [狀態設定 (DSC)]。
- 選取 [節點],然後選取有問題的節點。
- 選取 [取消註冊] 以取消註冊節點。
步驟 2:從節點解除安裝 DSC 擴充功能
- 在 Azure 入口網站中,移至 [首頁]> [虛擬機器]> (失敗節點) > [擴充功能]。
- 選取 PowerShell DSC 擴充功能 [Microsoft.Powershell.DSC]。
- 選取 [解除安裝] 以解除安裝擴充功能。
步驟 3:從節點移除所有錯誤或過期的憑證
在失敗節點上,從提高權限的 PowerShell 命令提示字元中執行下列命令:
$certs = @()
$certs += dir cert:\localmachine\my | ?{$_.FriendlyName -like "DSC"}
$certs += dir cert:\localmachine\my | ?{$_.FriendlyName -like "DSC-OaaS Client Authentication"}
$certs += dir cert:\localmachine\CA | ?{$_.subject -like "CN=AzureDSCExtension*"}
"";"== DSC Certificates found: " + $certs.Count
$certs | FL ThumbPrint,FriendlyName,Subject
If (($certs.Count) -gt 0)
{
ForEach ($Cert in $certs)
{
RD -LiteralPath ($Cert.Pspath)
}
}
步驟 4:重新註冊失敗節點
- 在 Azure 入口網站中,移至 [首頁]>[自動化帳戶]> (您的自動化帳戶) > [狀態設定 (DSC)]。
- 選取 [節點]。
- 選取 [新增]。
- 選取失敗節點。
- 選取 [連線],然後選取您想要的選項。
案例:節點處於失敗狀態,並發生「找不到」錯誤
問題
節點在報告中出現「失敗」狀態,而且發生錯誤:
The attempt to get the action from server https://<url>//accounts/<account-id>/Nodes(AgentId=<agent-id>)/GetDscAction failed because a valid configuration <guid> cannot be found.
原因
此錯誤通常起因於將節點指派給設定名稱 (例如 ABC),而不是指派給節點設定 (MOF 檔案) 名稱 (例如 ABC.WebServer)。
解決方法
請確定您以「節點設定名稱」來指派節點,而不是使用「設定名稱」。
您可以使用 Azure 入口網站或 PowerShell Cmdlet,將節點設定指派給節點。
- 在 Azure 入口網站中,移至 [首頁]>[自動化帳戶]> (您的自動化帳戶) > [狀態設定 (DSC)]。 然後選取節點,再選取 [指派節點設定]。
- 使用 Set-AzAutomationDscNode Cmdlet。
案例:編譯設定時,沒有產生任何節點設定 (MOF 檔案)
問題
您的 DSC 編譯工作因發生下列錯誤而暫停:
Compilation completed successfully, but no node configuration **.mof** files were generated.
原因
當 DSC 設定中在 Node
關鍵字後面的運算式評估為 $null
時,不會產生任何節點設定。
解決方法
使用下列其中一個解決方案來修正問題:
- 請確定設定定義中在
Node
關鍵字旁的運算式不是評估為 Null。 - 如果您在編譯設定時傳遞 ConfigurationData,請確定您傳遞的值符合設定從設定資料中預期的值。
案例:DSC 節點報告變成停留在「進行中」狀態
問題
DSC 代理程式輸出:
No instance found with given property values
原因
您已升級 Windows Management Framework (WMF) 版本,但 Windows Management Instrumentation (WMI) 已損毀。
解決方法
請遵循 DSC 已知問題和限制中的指示進行。
案例:無法在 DSC 組態中使用認證
問題
DSC 編譯工作因為下列錯誤而暫止:
System.InvalidOperationException error processing property 'Credential' of type <some resource name>: Converting and storing an encrypted password as plaintext is allowed only if PSDscAllowPlainTextPassword is set to true.
原因
您已在設定中使用認證,但沒有為每個節點設定提供適當的 ConfigurationData
將 PSDscAllowPlainTextPassword
設為 true。
解決方法
針對設定中提到的每個節點設定,請確定傳入適當的 ConfigurationData
將 PSDscAllowPlainTextPassword
設為 true。 請參閱在 Azure 自動化狀態設定中編譯 DSC 設定。
案例:從 DSC 擴充功能啟用電腦時發生「處理擴充功能失敗」錯誤
問題
使用 DSC 擴充功能啟用電腦時失敗,傳回下列錯誤:
VM has reported a failure when processing extension 'Microsoft.Powershell.DSC'. Error message: \"DSC COnfiguration 'RegistrationMetaConfigV2' completed with error(s). Following are the first few: Registration of the Dsc Agent with the server <url> failed. The underlying error is: The attempt to register Dsc Agent with Agent Id <ID> with the server <url> return unexpected response code BadRequest. .\".
原因
此錯誤通常起因於指派不存在於服務中的節點設定名稱給節點。
解決方法
- 請確定您指派給節點的名稱與服務中的名稱完全相符。
- 您可以選擇不包括節點設定名稱,這樣會啟用節點,但不會指派節點設定。
案例:使用 PowerShell 註冊節點時出現「發生一或多個錯誤」錯誤
問題
當您使用 Register-AzAutomationDSCNode 或 Register-AzureRMAutomationDSCNode 註冊節點時,您收到下列錯誤:
One or more errors occurred.
原因
此錯誤起因於您嘗試在自動化帳戶使用的訂用帳戶之外註冊節點。
解決方法
將跨訂用帳戶節點視為定義給個別雲端或內部部署。 使用下列其中一個選項來啟用機器,以註冊節點:
案例:「佈建失敗」錯誤訊息
問題
當您註冊節點時,您看到下列錯誤:
Provisioning has failed
原因
當節點與 Azure 之間的連線能力發生問題時,就會出現此訊息。
解決方法
判斷您的節點是否在虛擬私人網路 (VPN) 中,或是否有其他問題導致無法連線到 Azure。 請參閱針對功能部署問題進行疑難排解。
案例:在 Linux 中套用設定時失敗,發生一般錯誤
問題
在 Linux 中套用設定時失敗,傳回下列錯誤:
This event indicates that failure happens when LCM is processing the configuration. ErrorId is 1. ErrorDetail is The SendConfigurationApply function did not succeed.. ResourceId is [resource]name and SourceInfo is ::nnn::n::resource. ErrorMessage is A general error occurred, not covered by a more specific error code..
原因
如果 /tmp 位置設為 noexec
,則目前的 DSC 版本無法套用設定。
解決方法
從 /tmp 位置移除 noexec
選項。
案例:重疊的節點設定名稱可能導致錯誤的版本
問題
當您使用單一設定指令碼來產生多個節點設定,但某些節點設定名稱是其他名稱的子集時,編譯服務最後會指派錯誤的設定。 只有當您使用單一指令碼來產生設定,且每一節點都有設定資料時,而且只有當字串開頭發生名稱重疊時,才會發生此問題。 例如,在 Cmdlet 中使用單一設定指令碼,根據 以雜湊表傳遞的節點資料來產生設定,而節點資料包含名為 server 和 1server 的伺服器。
原因
這是編譯服務的已知問題。
解決方法
最佳解決方法是在本機或 CI/CD 管道中編譯,並將節點設定 MOF 檔案直接上傳至服務。 如果必須在服務中編譯,則次佳解決方法是分割編譯作業,以避免名稱重疊。
案例:DSC 設定上傳時發生閘道逾時錯誤
問題
當您上傳 DSC 設定時,您收到 GatewayTimeout
錯誤。
原因
需要較長時間來編譯的 DSC 設定可能會造成此錯誤。
解決方法
您可以在任何 Import-DSCResource 呼叫中明確包含 ModuleName
參數,以加速剖析 DSC 設定。
案例:上線機器時發生錯誤
問題
當您將機器上線時,收到 agent has a problem
錯誤。
原因
這是已知的問題。 您無法再次指派相同的設定,因為節點仍處於擱置狀態。
解決方法
解決方法是套用不同的測試組態,並再次套用原始組態。
下一步
如果在這裡沒有看到問題或無法解決問題,請嘗試下列其中一個管道以取得其他支援:
- 透過 Azure 論壇獲得由 Azure 專家所提供的解答。
- 連線至 @AzureSupport,這是用來改善客戶體驗的官方 Microsoft Azure 帳戶。 Azure 支援會將 Azure 社群連線到解答、支援及專家。
- 提出 Azure 支援事件。 前往 Azure 支援網站,然後選取 [取得支援]。