Public/Invoke-NexthinkVSphereConnector.ps1
|
function Invoke-NexthinkVSphereConnector { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$vSphereEnvironment, [Parameter(Mandatory = $false)] [string]$ScriptRootPath = $script:ModuleRoot ) $exitCode = 0 $version = Get-ModuleVersion try { $script:IN_MEMORY_LOGS.Clear() $config = Get-Configuration -ScriptRootPath $ScriptRootPath -vSphereEnvironment $vSphereEnvironment Initialize-Logger -Config $config Write-CustomLog -Message "Starting vSphere Connector $version for environment: $vSphereEnvironment" -Severity 'INFO' Write-CustomLog -Message "Script root path: $ScriptRootPath" -Severity 'DEBUG' Write-CustomLog -Message "Successfully loaded configuration for environment: $vSphereEnvironment" -Severity 'DEBUG' Remove-SpoolStaleFiles -Config $config -MaxFileCount $script:SPOOL_MAX_FILE_COUNT $state = Read-State -Config $config if (Test-StateHasPendingData -State $state) { try { $payload = Read-SpoolData -Config $config -State $state if ($null -eq $payload -or $payload.Count -eq 0) { Write-CustomLog -Message "State indicates pending data, but no spool payloads were found. Continuing to query fresh data." -Severity 'WARNING' } else { Write-CustomLog -Message "Successfully read pending payload: $payload" -Severity 'DEBUG' Send-Data -State $state -Config $config -Payload $payload -Timestamp $state.watermarks.last_received_utc } } catch { Write-CustomLog -Message "Non-fatal error while sending pending spooled data. Continuing to query fresh data. Details: $($_.Exception.Message)" -Severity 'ERROR' -NoCache } } $hypervisorMetrics = Get-HypervisorMetricsPayload -State $state -Config $config try { Send-Data -State $state -Config $config -Payload $hypervisorMetrics.Payload -Timestamp $hypervisorMetrics.Range.End } catch { Write-CustomLog -Message "Non-fatal error while sending current payload. Data was still collected/spooled. Details: $($_.Exception.Message)" -Severity 'ERROR' -NoCache } } catch { $exitCode = 1 Write-CustomLog -Message "Error in vSphere Connector: $_" -Severity 'ERROR' } finally { if ($null -ne $config -and $null -ne $config.NexthinkAPI) { try { Send-Logs -vSphereEnvironment $vSphereEnvironment ` -Version $version ` -LogsApiHost $config.NexthinkAPI.HostFQDN ` -LoginHost $config.NexthinkAPI.LoginFQDN ` -NexthinkTarget $config.NexthinkAPI.WindowsCredentialEntry } catch { Write-CustomLog -Message "Failed to send logs to API: $($_.Exception.Message)" -Severity 'ERROR' -NoCache } } Wait-LoggingFlush } return $exitCode } |