針對 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 設定。 如需詳細資訊,請參閱私人網路的設定

  • 當您停用 Azure 自動化中的本機驗證時。 請參閱停用本機驗證。 若要修正此問題,請參閱重新啟用本機驗證

  • 用戶端電腦時間與實際時間有好幾分鐘的差距。 (若要檢查時間,請使用:w32tm /stripchart /computer:time.windows.com /samples:6)。

解決方法

使用下列步驟來重新註冊失敗的 DSC 節點。

步驟 1:取消註冊節點

  1. 在 Azure 入口網站中,移至 [首頁]>[自動化帳戶]> (您的自動化帳戶) > [狀態設定 (DSC)]
  2. 選取 [節點],然後選取有問題的節點。
  3. 選取 [取消註冊] 以取消註冊節點。

步驟 2:從節點解除安裝 DSC 擴充功能

  1. 在 Azure 入口網站中,移至 [首頁]> [虛擬機器]> (失敗節點) > [擴充功能]
  2. 選取 PowerShell DSC 擴充功能 [Microsoft.Powershell.DSC]
  3. 選取 [解除安裝] 以解除安裝擴充功能。

步驟 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:重新註冊失敗節點

  1. 在 Azure 入口網站中,移至 [首頁]>[自動化帳戶]> (您的自動化帳戶) > [狀態設定 (DSC)]
  2. 選取 [節點]
  3. 選取 [新增]。
  4. 選取失敗節點。
  5. 選取 [連線],然後選取您想要的選項。

案例:節點處於失敗狀態,並發生「找不到」錯誤

問題

節點在報告中出現「失敗」狀態,而且發生錯誤:

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.

原因

您已在設定中使用認證,但沒有為每個節點設定提供適當的 ConfigurationDataPSDscAllowPlainTextPassword 設為 true。

解決方法

針對設定中提到的每個節點設定,請確定傳入適當的 ConfigurationDataPSDscAllowPlainTextPassword 設為 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-AzAutomationDSCNodeRegister-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 中使用單一設定指令碼,根據 以雜湊表傳遞的節點資料來產生設定,而節點資料包含名為 server1server 的伺服器。

原因

這是編譯服務的已知問題。

解決方法

最佳解決方法是在本機或 CI/CD 管道中編譯,並將節點設定 MOF 檔案直接上傳至服務。 如果必須在服務中編譯,則次佳解決方法是分割編譯作業,以避免名稱重疊。

案例:DSC 設定上傳時發生閘道逾時錯誤

問題

當您上傳 DSC 設定時,您收到 GatewayTimeout 錯誤。

原因

需要較長時間來編譯的 DSC 設定可能會造成此錯誤。

解決方法

您可以在任何 Import-DSCResource 呼叫中明確包含 ModuleName 參數,以加速剖析 DSC 設定。

案例:上線機器時發生錯誤

問題

當您將機器上線時,收到 agent has a problem 錯誤。

原因

這是已知的問題。 您無法再次指派相同的設定,因為節點仍處於擱置狀態。

解決方法

解決方法是套用不同的測試組態,並再次套用原始組態。

下一步

如果在這裡沒有看到問題或無法解決問題,請嘗試下列其中一個管道以取得其他支援:

  • 透過 Azure 論壇獲得由 Azure 專家所提供的解答。
  • 連線至 @AzureSupport,這是用來改善客戶體驗的官方 Microsoft Azure 帳戶。 Azure 支援會將 Azure 社群連線到解答、支援及專家。
  • 提出 Azure 支援事件。 前往 Azure 支援網站,然後選取 [取得支援]