I'd like to be able to pass around DSC configuration objects to helper functions/cmdlets in order to make using them a little easier.
An example such configuration is:
[DSCLocalConfigurationManager()]
configuration LCMConfig
{
Node $AllNodes.NodeName
{
Settings
{
ActionAfterReboot = 'ContinueConfiguration'
ConfigurationMode = 'ApplyOnly'
RebootNodeIfNeeded = $true
}
}
}
Is there any way to do something like
MyHelperFunction `
-ConfigurationName LCMConfig `
-ConfigurationData $configurationData `
-Credential $administratorCredential
where the LCMConfig
configuration is being passed into MyHelperFunction
who can do with it what it wants?
Ok I finally figured out how to do it. You can do it with:
$configuration = Get-Command $ConfigurationName
Invoke-DscConfiguration `
-Configuration $configuration `
-ConfigurationData $configurationData `
-Credential $administratorCredential
where Invoke-DscConfiguration
is:
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
}
}