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



我希望能够将DSC配置对象传递给帮助程序函数/cmdlet,以便更轻松地使用它们。

此类配置的示例如下:

[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
    }
}

最新更新