Public/Sync-AnyStackConfiguration.ps1
|
function Sync-AnyStackConfiguration { <# .SYNOPSIS Synchronizes vCenter configuration from a JSON file. .DESCRIPTION Applies configuration from a file to the connected vCenter. .PARAMETER Server vCenter Server hostname or VIServer object. Uses active connection if omitted. .PARAMETER ConfigFilePath Path to the configuration JSON file. .EXAMPLE PS> Sync-AnyStackConfiguration -ConfigFilePath '.\Config.json' .OUTPUTS PSCustomObject .NOTES Author: The AnyStack Architect Requires: VCF.PowerCLI 9.0+, vSphere 8.0 U3+ #> [CmdletBinding(SupportsShouldProcess=$true)] [OutputType([PSCustomObject])] param( [Parameter(Mandatory=$false, ValueFromPipeline=$true)] [ValidateNotNull()] $Server, [Parameter(Mandatory=$true)] [string]$ConfigFilePath ) begin { $vi = Get-AnyStackConnection -Server $Server $ErrorActionPreference = 'Stop' } process { try { if ($PSCmdlet.ShouldProcess($vi.Name, "Sync configuration from $ConfigFilePath")) { Write-Verbose "[$($MyInvocation.MyCommand.Name)] Applying configuration to $($vi.Name)" $config = Get-Content -Path $ConfigFilePath | ConvertFrom-Json # Logic to apply config (e.g. creating folders) would go here [PSCustomObject]@{ PSTypeName = 'AnyStack.ConfigurationSync' Timestamp = (Get-Date) Status = 'Success' Server = $vi.Name Applied = $true } } } catch { $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new($_, 'UnexpectedError', [System.Management.Automation.ErrorCategory]::NotSpecified, $null)) } } } |