PowerShell DSC复合资源

时间:2014-03-03 20:57:09

标签: powershell

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

查看“Get-DSCResource”函数后,似乎需要一个'DSCResources'子文件夹,PowerShell.org电子书没有说明,但PowerShell博客却说明了这一点。 Get-DSCResources函数使用资源名称调用Get-Module(示例中为SimpleConfig)。当根文件夹中没有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"

1 个答案:

答案 0 :(得分:4)

更新2014-04-12

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

复合配置应该作为容器模块的DSCResources子文件夹中的普通DSC资源创建。这在this StackOverflow question的答案中提到,我还在creating composite DSC configurations which take parameters, which gives detailed instructions on the correct approach上写了一篇博文。

我保留了最初的答案,只有通过一次删除,因为我认为它仍然有用。另外,鉴于以下信息,它也应该是非常可用的。

需要进口模块调用的原因是只能自动加载普通的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文件夹中找到该代码。

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文件

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    

<击>