1

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

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

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

提前致谢。

此致,

托马斯

4

3 回答 3

1

为了搭载@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 自动化中,您将运行脚本)将其编译到内存中。然后,像调用函数一样调用配置以生成新的所需状态配置。您可以在此处指定本地计算机名称

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

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

Start-DscConfiguration -ComputerName localhost -Wait -Force -Verbose 
于 2016-03-29T13:28:32.667 回答
1

总之,DSC 配置应用如下:

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

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

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

于 2016-03-28T17:38:45.710 回答
0

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

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

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

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

于 2016-04-30T18:44:09.403 回答