Private/New-ServerConfigurationFromJson.ps1
|
function New-ServerConfigurationFromJson { [CmdletBinding()] [OutputType([System.Object[]])] param( [Parameter(Mandatory=$true)] [PSCustomObject] $JsonConfig ) $servers = [System.Collections.Generic.List[psTPCCLASSES.ServerConfiguration]]::new() # Credential if ( $JsonConfig.CredentialName -and $JsonConfig.CredentialName -eq 'integrated') { $setCredential = $null } elseif ( $JsonConfig.CredentialName -eq 'get' ) { $setCredential = Get-Credential } else { $setCredential = Get-CredentialFromVault -VaultName $JsonConfig.SecretVaultName -CredentialName $JsonConfig.CredentialName } foreach ( $ServerConfig in $JsonConfig.servers ) { try { $paramServer = @{ 'Computername' = $ServerConfig.computername } if ( $null -ne $setCredential ) { $paramServer['Credential'] = $setCredential } $serverCounterMap = Get-CounterMap @paramServer $paramServer['counterMap'] = $serverCounterMap $performanceCounters = [System.Collections.Generic.List[psTPCCLASSES.CounterConfiguration]]::new() $skipServer = $false if ( $ServerConfig.CounterConfig ) { foreach ( $CounterConfig in $ServerConfig.CounterConfig ) { $paramCounter = $paramServer.Clone() if ($CounterConfig -match '^[A-Za-z][A-Za-z0-9_]*$') { # counter name $paramCounter['ConfigName'] = $CounterConfig } elseif ($CounterConfig -match '^[A-Za-z]:\\|^\\\\') { # counter path (local, unc) $paramCounter['ConfigPath'] = $CounterConfig } else { # Nothing to do here - schema validation would have already aborted before reaching this point } $config = Get-CounterConfiguration @paramCounter if ( $config.SkipServer ) { $skipServer = $true break } $performanceCounters.AddRange($config.Counters) } } if ( $skipServer ) { Write-Warning "Skipping server '$($ServerConfig.computername)' - marked as unreachable during counter configuration." Start-Sleep 1 continue } $serverConfiguration = [psTPCCLASSES.ServerConfiguration]::new( $ServerConfig.computername, $ServerConfig.comment, $performanceCounters, $true # skip availability check - server already validated via Get-CounterMap ) $servers.Add($serverConfiguration) } catch { Write-Warning "Failed to create ServerConfiguration for $($ServerConfig.computername): $_ . Skipping this server." continue } } return , $servers } |