PowerShell DSC:参数不起作用的复合资源



我正在研究DSC复合资源,但我似乎无法正常工作。我的代码:

e: dev dscresources run.ps1:

Import-Module Test -Force
Configuration Run
{
    Import-DscResource -ModuleName Test
    Node localhost 
    {
        Test Common {
            TestString = "blabla"
        }
    }
}
Run

和复合资源:

e: dev dscresources test test.schema.psm1:

Configuration Test {
    Param (
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$Teststring
    )
    Log Example {
        Message = $Teststring
    }
}

e: dev dscresources test test test.psd1:

#
# Module manifest for module 'test'
#
# Generated by: Administrator
#
# Generated on: 3/12/2014
#
@{
# Script module or binary module file associated with this manifest.
RootModule = 'test.schema.psm1'
# Version number of this module.
ModuleVersion = '1.0'
# ID used to uniquely identify this module
GUID = 'a0c8ed64-00bc-4112-997f-d65d567bc043'
# Author of this module
Author = 'Administrator'
# Company or vendor of this module
CompanyName = 'Unknown'
# Copyright statement for this module
Copyright = '(c) 2014 Administrator. All rights reserved.'
# Description of the functionality provided by this module
# Description = ''
# Minimum version of the Windows PowerShell engine required by this module
# PowerShellVersion = ''
# Name of the Windows PowerShell host required by this module
# PowerShellHostName = ''
# Minimum version of the Windows PowerShell host required by this module
# PowerShellHostVersion = ''
# Minimum version of Microsoft .NET Framework required by this module
# DotNetFrameworkVersion = ''
# Minimum version of the common language runtime (CLR) required by this module
# CLRVersion = ''
# Processor architecture (None, X86, Amd64) required by this module
# ProcessorArchitecture = ''
# Modules that must be imported into the global environment prior to importing this module
# RequiredModules = @()
# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()
# Script files (.ps1) that are run in the caller's environment prior to importing this module.
# ScriptsToProcess = @()
# Type files (.ps1xml) to be loaded when importing this module
# TypesToProcess = @()
# Format files (.ps1xml) to be loaded when importing this module
# FormatsToProcess = @()
# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
# NestedModules = @("")
# Functions to export from this module
#FunctionsToExport = '*'
# Cmdlets to export from this module
#CmdletsToExport = '*'
# Variables to export from this module
#VariablesToExport = '*'
# Aliases to export from this module
#AliasesToExport = '*'
# List of all modules packaged with this module
# ModuleList = @()
# List of all files packaged with this module
# FileList = @()
# Private data to pass to the module specified in RootModule/ModuleToProcess
# PrivateData = ''
# HelpInfo URI of this module
# HelpInfoURI = ''
# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
# DefaultCommandPrefix = ''
}

但没有提供参数,我将获得以下输出:

cmdlet Test at command pipeline position 1
Supply values for the following parameters:
Teststring:

因此,复合资源似乎确实有效,但是传递的参数未读取。因此,它可以保释并要求我手动输入参数。

复合资源是否损坏?还是我做错了什么?

您更新后,我可以成功地重现您的问题,此后我无法再次使我的原始配置再次工作,这让我相信我在原始测试中遇到了某种错误。在以下示例中,我将使用BaseConfig进行配置名称,而MyParameter用于参数名称。

为了创建一个逐行说明的更长描述,我写了一篇博客文章:http://robertwesterlund.net/post/post/2014/03/03/12/creating-a-compomposite-dsc - 配置与参数

参数是一个普通模块的复合配置

当创建复合配置作为普通模块(例如,直接在C:Program FilesWindowsPowerShellModulesMyModuleName中)时,它似乎的行为就像普通的CMDLET。这意味着,要将参数传递到我必须执行的复合配置:

Import-DscResource -ModuleName BaseConfig 
Node localhost 
{ 
    BaseConfig Common -MyParameter "My Parameter Value" 
    { 
    } 
} 

我必须承认,我不知道这是否会像其他部分的DSC资源那样行事。

支持参数的复合配置

我想编写配置的方式如下:

Import-DscResource -Name BaseConfig 
Node localhost 
{ 
    BaseConfig Common 
    { 
        MyParameter = "My Parameter Value" 
    } 
} 

(请注意Import-DscResource也有所不同。)

要使此工作工作,我必须制作一个虚拟容器模块(当然可以在必要时包含实现,但我只创建一个空的psm1文件和一个指向该PSM1文件的psd1文件。制作容器后。然后,我没有实施的模块,然后为复合配置制作了一个DSC资源模块(位于MyContainerModuleDSCResourcesMyCompositeConfiguration文件夹中)。此之后,它正如预期的。这可能是创建复合配置的正确方法。

最新更新