如何在PowerShell所需状态配置中从配置文件和配置数据文件创建MOF?

时间:2016-02-04 06:33:30

标签: windows powershell dsc

我有一个配置数据文件,如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,我该怎么做?感谢。

1 个答案:

答案 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