如何将 PowerShell DSC 配置作为对象传递?

How to pass around a PowerShell DSC Configuration as an object?

我希望能够将 DSC 配置对象传递给助手 functions/cmdlets,以便更轻松地使用它们。

这样的配置示例是:

[DSCLocalConfigurationManager()]
configuration LCMConfig
{
    Node $AllNodes.NodeName
    {
        Settings
        {
            ActionAfterReboot = 'ContinueConfiguration'
            ConfigurationMode = 'ApplyOnly'
            RebootNodeIfNeeded = $true
        }
    }
}

有什么办法可以做到

MyHelperFunction `
    -ConfigurationName LCMConfig `
    -ConfigurationData $configurationData `
    -Credential $administratorCredential

LCMConfig 配置被传递给 MyHelperFunction 谁可以随意使用它?

好的,我终于知道怎么做了。你可以这样做:

$configuration = Get-Command $ConfigurationName
Invoke-DscConfiguration `
    -Configuration $configuration `
    -ConfigurationData $configurationData `
    -Credential $administratorCredential

其中 Invoke-DscConfiguration 是:

function Invoke-DscConfiguration
{
    [CmdletBinding()]
    [OutputType([String])]
    Param
    (
        [Parameter(Mandatory=$true)]
        [System.Management.Automation.ConfigurationInfo]$Configuration,

        [Parameter(Mandatory=$true)]
        [Hashtable]$ConfigurationData,

        [Parameter(Mandatory=$true)]
        [PSCredential]$Credential,

        [Switch]$IsLCMConfiguration,

        [HashTable]$ConfigurationParameters
    )

    $ErrorActionPreference = 'Stop'

    $outputPath = Get-TemporaryDscDirectory

    Write-Verbose "Compiling the '$($ConfigurationName.Name)' configuration."
    & $Configuration -ConfigurationData $ConfigurationData -OutputPath $outputPath | Out-Null

    Write-Verbose "Executing the '$($ConfigurationName.Name)' configuration."
    if ($IsLCMConfiguration)
    {
        Set-DscLocalConfigurationManager -Path $outputPath -Force -Credential $Credential -Verbose
    }
    else
    {
        Start-DscConfiguration -Path $outputPath -Force -Wait -Credential $Credential -Verbose
    }
}