Public/Invoke-DSC.ps1
function Invoke-DSC { [CmdletBinding()] Param ( [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)] [object[]]$Resources ) Begin { } Process { foreach ($resource in $resources) { try { $splat = @{ Name = $resource.dscResourceName Property = $resource.Property ModuleName = $resource.ModuleName ErrorAction = 'SilentlyContinue' } Write-Output "[Start Test] [[$($resource.dscResourceName)]$($resource.ResourceName)]" $testResults = Invoke-DscResource @splat -Method Test -ErrorVariable TestError -Verbose:$false if ($TestError) { Write-Error ("Failed to Invoke $($resource.resourceName)" + ($TestError[0].Exception.Message)) } elseif (($testResults.InDesiredState) -ne $true) { Write-Output "[Start Set] [[$($resource.dscResourceName)]$($resource.ResourceName)]" Invoke-DscResource @splat -Method Set -ErrorVariable SetError -Verbose:$false } if ($SetError) { Write-Error "Failed to invoke [$($resource.resourceName)] ($SetError[0].Exception.Message)" } } catch [System.Exception] { # Exception is stored in the automatic variable _ } } } End { } } |