我有一个配置数据文件,如data.psd1
@{
AllNodes = @(
@{
NodeName = "*"
LogPath = "C:\Logs"
},
@{
NodeName = "machine1";
Roles = @( "SmtpRole", "WebRole" )
},
@{
NodeName = "machine2";
Roles = @( "SmtpRole" )
}
)
}
我有像FarmConfiguration.ps1
这样的配置Configuration FarmConfiguration {
Import-DscResource -ModuleName 'PSDesiredStateConfiguration'
Import-DscResource -ModuleName 'MyCustomDsc'
Node $AllNodes.NodeName
{
SimpleTcpIpConfiguration SimpleTcpIp
{
}
}
Node $AllNodes.Where{$_.Roles -contains "WebRole"}.NodeName
{
WebConfiguration Web
{
}
}
Node $AllNodes.Where{$_.Roles -contains "SmtpRole"}.NodeName
{
SmtpConfiguration Smtp
{
}
}
}
我知道是否添加" FarmConfiguration-ConfigurationData data.psd1"在我的FarmConfiguration.ps1文件的底部,然后一切正常。
但这是一个很大的问题,我根本不希望我的FarmConfiguration知道数据文件,它会检查源代码控制。
我希望能够根据各种不同的数据文件创建MOF,我该怎么做?感谢。
答案 0 :(得分:0)
好的,我发现了如何做我要问的事。
出于所有实际目的,FarmConfiguration是.ps1文件中的私有函数。所以我将FarmConfiguration.ps1更新为以下内容。
param(
[Parameter(Mandatory)]
[string]$ConfigurationData
)
Configuration FarmConfiguration {
Import-DscResource -ModuleName 'PSDesiredStateConfiguration'
Import-DscResource -ModuleName 'MyCustomDsc'
Node $AllNodes.NodeName
{
SimpleTcpIpConfiguration SimpleTcpIp
{
}
}
Node $AllNodes.Where{$_.Roles -contains "WebRole"}.NodeName
{
WebConfiguration Web
{
}
}
Node $AllNodes.Where{$_.Roles -contains "SmtpRole"}.NodeName
{
SmtpConfiguration Smtp
{
}
}
}
FarmConfiguration -ConfigurationData $ConfigurationData
现在我已经完成了,我可以从一个单独的脚本中调用它
.\FarmConfiguration.ps1 -ConfigurationData data.psd1