在 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 配置应用如下:
- 在 PowerShell 中编写配置
- 编译配置 - 这会生成一个 mof 文件
- 将 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
我正在尝试使用 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 配置应用如下:
- 在 PowerShell 中编写配置
- 编译配置 - 这会生成一个 mof 文件
- 将 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