如何将 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
}
}
我希望能够将 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
}
}