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
                }
            }
            catch {
                Write-CustomLog -Message "Non-fatal error while sending pending spooled data. Continuing to query fresh data. Details: $($_.Exception.Message)" -Severity 'ERROR' -NoCache
            }
        }

        $currentPayload = @(Get-HypervisorMetricsPayload -State $state -Config $config)

        try {
            Send-Data -State $state -Config $config -Payload $currentPayload
        }
        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
}