我正在尝试使用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名称的最佳/最佳建议方法是什么?
提前致谢。
致以最诚挚的问候,
托马斯
答案 0 :(得分:1)
总之,DSC配置应用于:
指定的代码实际上在步骤#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