繁体   English   中英

PowerShell DSC复合资源

[英]PowerShell DSC Composite Resources

我已经成功创建了DSC配置并将其部署到服务器上。 下一步,我试图将服务器中常见的Configuration块的各个部分分解为可重用的部分,或以DSC的“复合资源”的说法。 经过大量研究,我仍然无法使用复合资源,在运行“ Get-DSCResource”时未列出它们。

浏览完“ Get-DSCResource”功能后,似乎需要一个“ DSCResources”子文件夹,PowerShell.org电子书未声明该子文件夹,而PowerShell Blog却声明了该子文件夹。 Get-DSCResources函数使用资源名称(示例中为SimpleConfig)调用Get-Module。 当根文件夹中没有psd1时(示例中的BaseConfiguration),这两者都不说明Get-Module无法“看到”子文件夹。 我对这些方法进行了调整,生成了下面的示例,但是也没有成功。

我看了看:

配置示例:

# $env:ProgramFiles\WindowsPowerShell\BaseConfiguration\BaseConfiguration.psd1
@{
    ModuleVersion = '1.0'
    GUID = '84f449fd-8f26-4bb9-908f-eb675c56b5d8'
    Author = 'James Pogran'
}

# $env:ProgramFiles\WindowsPowerShell\BaseConfiguration\DSCResoures\SimpleConfig\SimpleConfig.schema.psm1
Configuration SimpleConfig
{
    Log LogThis
    {
        Message = "Foo"
    }
}

# $env:ProgramFiles\WindowsPowerShell\BaseConfiguration\DSCResoures\SimpleConfig\SimpleConfig.psd1
RootModule = "SimpleConfig.schema.psm1"

更新2014-04-12

该答案中的原始说明可以正常工作,但是它显示了创建复合资源的错误方法,这就是为什么在能够在测试配置中使用复合配置之前,需要显式导入模块的原因。

组合配置应在容器模块的DSCResources子文件夹中创建为普通DSC资源。 这个StackOverflow问题的答案中提到了这一点,并且我还写了一篇博客文章,介绍如何使用参数创建复合DSC配置,其中提供了有关正确方法的详细说明

我保留了原始答案,只是删除线,因为我认为它仍然很有帮助。 同样,鉴于以下信息,它也应该非常有用。

之所以需要Import-Module调用,是因为只有普通的DSC资源能够自动加载。 应该在容器模块MyContainerModule\\DSCResources\\BaseConfig的子文件夹中创建复合配置。 容器模块的psm1文件可以为空,并且复合配置可以与原始答案状态完全相同( Ìmport-DscResource命令使用Name参数而不是ModuleName参数,但是如果要在其中保留BaseConfig名称)。

创建复合DSC配置的详细步骤

以下是创建和验证称为 BaseConfig的复合配置时执行的步骤。 希望这对您有所帮助。

对于以下所有步骤,我让PowerShell ISE以管理员身份运行。

创建文件夹以保存模块

 
 
 
  
  PS C:\\WINDOWS\\system32> cd 'C:\\Program Files\\WindowsPowerShell\\Modules' PS C:\\Program Files\\WindowsPowerShell\\Modules> md BaseConfig Directory: C:\\Program Files\\WindowsPowerShell\\Modules Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2014-03-04 23:45 BaseConfig PS C:\\Program Files\\WindowsPowerShell\\Modules> cd .\\BaseConfig PS C:\\Program Files\\WindowsPowerShell\\Modules\\BaseConfig>
 
  

创建复合配置文件

该文件的命名必须以“ .schema.psm1”结尾,因为该文件已硬编码到PowerShell DSC模块中,可以在文件夹 C:\\windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\PSDesiredStateConfiguration找到该代码 C:\\windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\PSDesiredStateConfiguration

 
 
 
  
  PS C:\\Program Files\\WindowsPowerShell\\Modules\\BaseConfig> notepad BaseConfig.schema.psm1
 
  

在BaseConfig.schema.psm1文件中,我输入了以下配置:

 
 
 
  
  Configuration BaseConfig { File TestFile1 { DestinationPath = "C:\\CompositeConfigurationCreatedTextFile1.txt"; Contents = "File1Content"; } File TestFile2 { DestinationPath = "C:\\CompositeConfigurationCreatedTextFile2.txt"; Contents = "File2Content"; } }
 
  

创建模块清单

创建模块清单很容易,只要让PowerShell为您完成即可。

 
 
 
  
  PS C:\\Program Files\\WindowsPowerShell\\Modules\\BaseConfig> New-ModuleManifest -Path .\\BaseConfig.psd1 -RootModule BaseConfig.schema.psm1
 
  

验证PowerShell是否找到复合配置

完成此步骤后,我们应该完成复合配置。 要验证是否可以找到它,请尝试运行以下命令并验证输出:

 
 
 
  
  PS C:\\Program Files\\WindowsPowerShell\\Modules\\BaseConfig> Import-Module BaseConfig PS C:\\Program Files\\WindowsPowerShell\\Modules\\BaseConfig> Get-Command -CommandType Configuration CommandType Name ModuleName ----------- ---- ---------- Configuration BaseConfig BaseConfig
 
  

重要说明 :我发现如果我尝试执行测试配置(如下)而不先导入模块,则会失败; 它无法识别BaseConfig。 导入模块后,测试配置运行良好。 但是,如果以后我打开一个新的PowerShell会话或在当前PowerShell会话中运行Remove-Module(两种方法都确保该模块未在当前会话中加载),则配置将正常工作。 因此,由于某种原因,在我至少导入一次模块之前,它找不到新创建的复合配置。

测试复合配置

要测试组合配置,请创建一个配置,以在节点localhost上配置该配置,执行该配置,并验证是否已进行了预期的更改。 我在下面详细说明了执行此操作的确切步骤。

创建测试配置

为了使用复合配置,我首先创建了一个路径为c:\\ temp \\ testconfiguration.ps1的配置定义文件。

 
 
 
  
  PS C:\\Program Files\\WindowsPowerShell\\Modules\\BaseConfig> md c:\\Temp Directory: C:\\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2014-03-04 23:47 Temp PS C:\\Program Files\\WindowsPowerShell\\Modules\\BaseConfig> cd \\temp PS C:\\temp> notepad testconfiguration.ps1
 
  

我给了它以下内容:

 
 
 
  
  Configuration TestConfiguration { Import-DscResource -ModuleName BaseConfig node localhost { BaseConfig Common { # The created configuration did not have any parameters, thus no properties } } } TestConfiguration
 
  

创建mof文件

然后,要创建mof文件,只需执行ps1-file

 
 
 
  
  PS C:\\temp> .\\testconfiguration.ps1 Directory: C:\\temp\\TestConfiguration Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2014-03-04 23:49 2266 localhost.mof
 
  

执行DSC配置

之后,我让DSC使用以下命令执行配置:

 
 
 
  
  PS C:\\temp> Start-DscConfiguration TestConfiguration Id Name PSJobTypeName State HasMoreData Location Command -- ---- ------------- ----- ----------- -------- ------- 2 Job2 Configuratio... Running True localhost Start-DscConfiguration...
 
  

确认已进行预期的更改

最后,我通过验证应创建的两个文件的存在来验证复合配置是否已运行。

 
 
 
  
  PS C:\\temp> ls c:\\ -Filter *.txt Directory: C:\\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2014-03-04 23:51 15 CompositeConfigurationCreatedTextFile1.txt -a--- 2014-03-04 23:51 15 CompositeConfigurationCreatedTextFile2.txt
 
  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM