在Azure Automation DSC中获取计算机名

时间:2016-03-28 09:47:10

标签: dsc azure-automation

我正在尝试使用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 个答案:

答案 0 :(得分:1)

总之,DSC配置应用于:

  1. 在PowerShell中编写配置
  2. 编译配置 - 这会生成一个mof文件
  3. 将mof文件传递给执行相同的LocalConfigurationManager(LCM)
  4. 指定的代码实际上在步骤#2中获取了计算机的名称。请注意,#2可能发生在与要应用配置的计算机不同的计算机上。在这种情况下,它碰巧是AA服务方面的那个。

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

答案 1 :(得分:1)

为了捎带@NanaLakshaman的回答,让我们对这种配置进行分类。

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

import Cocoa

class ViewWithBackgroundColor : NSView {
    @IBInspectable var backgroundColor: NSColor? {
        get {
            guard let layer = layer, backgroundColor = layer.backgroundColor else { return nil }
            return NSColor(CGColor: backgroundColor)
        }

        set {
            wantsLayer = true
            layer?.backgroundColor = newValue?.CGColor
        }
    }

    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
}

现在,通过点击F5或运行脚本将其编译到内存中(在Azure自动化中,您将运行脚本)。然后,像调用函数一样调用配置以生成新的所需状态配置。 您可以在此处指定本地计算机名称

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  

        }
    }
}

这将创建一个新的DomainJoin -NodeName $env:ComputerName -DomainName SomeDomain -Credential (Get-Cred) 文件,然后您可以使用以下方法申请:

configuration.mof

答案 2 :(得分:0)

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

Azure Automation中提供了如何提供配置数据的示例,以及如何在资源中使用NodeName的示例:

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

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

答案 3 :(得分:0)

XDSCDomainJoin是xComputerManagement的剥离版本,可以很好地创建域加入虚拟机。请参阅本指南是否有帮助 - http://sanganakauthority.blogspot.in/2017/01/domain-join-azure-vm-using-azure.html