【问题标题】:Compiling DSC Config that contains Get-NetAdapter in Azure Automation在 Azure 自动化中编译包含 Get-NetAdapter 的 DSC Config
【发布时间】:2018-10-13 00:09:33
【问题描述】:

正如在many Azure Quick Start examples 中看到的那样,通常使用Get-NetAdapter 来获取网络接口名称,例如DNS 配置。这是一个例子:

configuration MyConfig
{

    $Interface=Get-NetAdapter|Where Name -Like "Ethernet*"|Select-Object -First 1
    $InterfaceAlias=$($Interface.Name)

    Node localhost
    {
        xDnsServerAddress DnsServerAddress
        {
            Address        = $DNSServer
            InterfaceAlias = $InterfaceAlias
            AddressFamily  = 'IPv4'
        }
   }
}

如果命令 Get-NetAdapter 在我的配置中并且配置是由 Azure 自动化编译的,我会收到以下错误:

无法连接到 CIM 服务器。指定的服务不作为已安装的服务存在。

有解决办法吗?

【问题讨论】:

    标签: powershell azure dsc azure-automation


    【解决方案1】:

    答案是——不可能。配置在 Azure 自动化服务器上​​编译,而不是在目标节点上。即使我要找到一种在配置中获取网络适配器名称的方法,它也会在 DSC 拉取服务器上获取适配器的名称,而不是目标节点。

    如果您对每个节点使用 1 个配置并且您在目标节点上预编译然后将其上传到 Azure 自动化,则问题中的代码将起作用。

    【讨论】:

      【解决方案2】:

      试试这个:

          xDnsServerAddress DnsServerAddress
          {
              Address        = $DNSServer
              InterfaceAlias = (Get-NetAdapter | ? name -Like "Ethernet*" | select -First 1).Name
              AddressFamily  = 'IPv4'
          }
      

      【讨论】:

      • 好主意,我没试过这个。但是同样的错误:(
      • 在这种情况下,我认为您唯一的解决方案是使用脚本资源:(
      【解决方案3】:

      Get-NetAdapter 在内部使用 WMI 来获取在 Azure 自动化中不起作用的信息。但是,您可以使用 get-netipinterface cmdlet 来获取有关适配器的信息。

      【讨论】:

      • 同样的问题。我能够使用(Get-NetIPInterface -AddressFamily IPv4 -InterfaceAlias Ethernet* | Select-Object -First 1).InterfaceAlias 在本地获取接口别名,但这随后因 Azure 自动化上的原始错误而失败。
      • 刚刚意识到您尝试运行的方案不适用于 Azure 自动化,因为 DSC 配置是在云中编译的,您需要在必须将其应用为的节点上对其进行编译您希望适配器的输出成为 InterfaceAlias 的一部分。
      • 是否有任何解决方法可以使用 Azure 自动化和 DSC?
      猜你喜欢
      • 2017-09-16
      • 1970-01-01
      • 2017-02-01
      • 2016-07-15
      • 2021-02-04
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      相关资源
      最近更新 更多