| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 
 | function Invoke-HybridIaC {[CmdletBinding(SupportsShouldProcess=$true)]
 param(
 [Parameter(Mandatory=$true)]
 [ValidateSet('Azure','AWS','OnPrem')]
 [string[]]$Environments,
 
 [string]$DscConfigPath = '$PSScriptRoot/dsc'
 )
 
 $deploymentReport = [PSCustomObject]@{
 Timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
 AppliedConfigs = @()
 ComplianceStatus = @{}
 CrossPlatformIssues = @()
 }
 
 try {
 
 $Environments | ForEach-Object {
 if ($PSCmdlet.ShouldProcess("Deploy $_ resources")) {
 terraform -chdir="$DscConfigPath/terraform/$_" apply -auto-approve
 }
 }
 
 
 $Environments | ForEach-Object {
 $dscConfig = Get-ChildItem "$DscConfigPath/$_" -Filter *.ps1
 $dscConfig | ForEach-Object {
 $job = Start-Job -ScriptBlock {
 param($config)
 & $config.FullName
 } -ArgumentList $_
 $deploymentReport.AppliedConfigs += $job | Wait-Job | Receive-Job
 }
 }
 
 
 $deploymentReport.ComplianceStatus = $Environments | ForEach-Object {
 $status = Test-DscConfiguration -CimSession (New-CimSession -ComputerName $_)
 @{$_ = $status.InDesiredState ? 'Compliant' : 'Non-Compliant'}
 }
 }
 catch {
 Write-Error "混合云部署失败: $_"
 terraform -chdir="$DscConfigPath/terraform" destroy -auto-approve
 }
 
 
 $deploymentReport | Export-Clixml -Path "$env:TEMP/HybridIaC_Report_$(Get-Date -Format yyyyMMdd).xml"
 return $deploymentReport
 }
 
 |