排查 Azure 自动化状态配置问题

注意

Azure 自动化 State Configuration 将于 2027 年 9 月 30 日停用,请在该日期之前转换到 Azure 计算机配置。 有关详细信息,请参阅博客文章公告。 Azure Machine Configuration 服务结合了 DSC 扩展、Azure Automation State Configuration 以及客户反馈中最常请求的功能。 Azure Machine Configuration 还包括通过已启用 Arc 的服务器提供的混合计算机支持。

注意

适用于 Linux 的 Azure Automation DSC 已于 2023 年 9 月 30 日停用。

本文提供了有关如何排查和解决在 Azure 自动化 State Configuration 中编译或部署配置时出现的问题的信息。 有关状态配置功能的常规信息,请参阅 Azure 自动化状态配置概述

诊断问题

收到配置的编译或部署错误时,下面列出了帮助你诊断问题的一些步骤。

1.确保配置在本地计算机上成功编译

Azure 自动化状态配置基于 PowerShell 所需状态配置 (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
https://<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.RegisterDscAgentCommand
    + PSComputerName        : <computerName>

原因

网络问题可以导致此错误。 检查防火墙设置,或者检查计算机是否位于代理服务器后面。

解决方法

验证计算机是否有权访问 DSC 的相应终结点,然后重试。 有关所需端口和地址的列表,请参阅网络规划

场景:状态报表返回响应代码 Unauthorized

问题

使用 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。 有关详细信息,请参阅专用网络的配置

  • 客户端计算机时间与实际时间相差数分钟。 使用以下命令检查时间:w32tm /stripchart /computer:time.windows.com /samples:6

解决方法

使用以下步骤重新注册失败的 DSC 节点。

步骤 1:取消注册节点

  1. 在 Azure 门户中,转到“主页”>“自动化帐户”>“(你的自动化帐户)”>“状态配置(DSC)”。
  2. 选择“节点”,然后选择有问题的节点。
  3. 选择“取消注册”以取消注册节点。

步骤 2:从节点中卸载 DSC 扩展

  1. 在 Azure 门户中,转到“主页”>“虚拟机”>“(失败的节点)”>“扩展”。
  2. 选择“Microsoft.Powershell.DSC”,即 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 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-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 作为哈希表传递的节点数据来生成配置,并且该节点数据包括名为 server 和 1server 的服务器 。

原因

这是编译服务的已知问题。

解决方法

最佳解决方法是在本地或在 CI/CD 管道中编译,并将节点配置 MOF 文件直接上传到服务。 如果服务中的编译是必需的,则下一个最佳解决方法是拆分编译作业,以便名称不发生重叠。

场景:DSC 配置上传时出现网关超时错误

问题

上传 DSC 配置时收到 GatewayTimeout 错误。

原因

需要很长时间来编译的 DSC 配置可能导致此错误。

解决方法

可以通过显式包括任何 Import-DSCResource 调用的 ModuleName 参数来更快地分析 DSC 配置。

场景:加入计算机时出错

问题

加入计算机时收到 agent has a problem 错误。

原因

这是已知问题。 无法再次分配相同的配置,因为节点会保持挂起状态。

解决方法

若要解决此问题,请应用不同的测试配置并再次尝试原始配置。

后续步骤

如果你的问题未在本文中列出,或者无法解决你遇到的问题,请尝试以下支持渠道之一:

  • 通过 Azure 论坛获取 Azure 专家的解答。
  • 联系 @AzureSupport,这是用于改进客户体验的官方 Azure 帐户。 Azure 支持人员会将你连接到 Azure 社区,从中可以获得解答、支持和专家建议。
  • 提出 Azure 支持事件。 请转到 Azure 支持站点并选择“获取支持”。