在 Azure Automation DSC 中获取计算机名

Getting computername in Azure Automation DSC

我正在尝试使用 Azure Automation Pull 服务器将 DSC 配置添加到 VM。通常,您可以使用环境变量 $env:COMPUTERNAME 获取当前机器的名称 - 即像这样:

xComputer JoinDomain
{ 
    Name  = $env:COMPUTERNAME
    DomainName = $ConfigurationData.NonNodeData.DomainDetails.DomainName             
    Credential    = $domainAdminCredential  
} 

但是当使用 Azure Automation 时 $env:COMPUTERNAME 似乎总是 return CLIENT 而不管当前的机器名称。使用 Azure 自动化时,best/most 推荐的动态获取 DSC 配置中当前 VM 名称的方法是什么?

提前致谢。

此致,

托马斯

总而言之,DSC 配置应用如下:

  1. 在 PowerShell 中编写配置
  2. 编译配置 - 这会生成一个 mof 文件
  3. 将 mof 文件传送到执行相同操作的 LocalConfigurationManager (LCM)

指定的代码实际上是在步骤#2 中获取计算机的名称。请注意,#2 可能发生在与您要应用配置的计算机不同的计算机上。在这种情况下,它恰好是 AA 服务端的那个。

遗憾的是,目前无法获取正在执行配置的计算机的名称,除非您选择使用脚本资源。因此,总而言之,您可以通过配置数据指定计算机名称,也可以使用脚本资源

加入域

为了借鉴@NanaLakshaman 的回答,让我们对这个配置进行参数化。

为了便于理解,我假设您只配置了计算机名和域加入。

configuration DomainJoin
{
 param
(
    [string[]]$NodeName ='localhost',
    [string]$DomainName,  
    [string]$credential
) 

#Import the required DSC Resources
Import-DscResource -Module xComputer

Node $NodeName
{ #ConfigurationBlock 


    xComputer JoinDomain
        {
            Name       = $nodename
            DomainName = $DomainName             
            Credential = $Credential  

        }
    }
}

现在,通过按 F5 或 运行 脚本将其编译到内存中(在 Azure 自动化中,您将是 运行 脚本)。然后,像调用函数一样调用配置来生成新的 Desired State Configuration。 在这里您可以指定本地计算机名称

DomainJoin -NodeName $env:ComputerName -DomainName SomeDomain -Credential (Get-Cred)

这将创建一个新的 configuration.mof 文件,然后您可以使用以下方式应用该文件:

Start-DscConfiguration -ComputerName localhost -Wait -Force -Verbose 

另一种选择是在配置数据中提供计算机名称。

这里是 Azure 自动化中如何提供配置数据的示例,以及如何在资源中使用 NodeName 的示例:

https://azure.microsoft.com/en-us/documentation/articles/automation-dsc-compile/

Also,您提到的特定用途不应要求提供名称。我在这里提出了一个问题: https://github.com/PowerShell/xComputerManagement/issues/29