Public/Invoke-NexthinkNutanixConnector.ps1
|
function Invoke-NexthinkNutanixConnector { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$NutanixEnvironment, [Parameter(Mandatory = $false)] [string]$ScriptRootPath = $script:ModuleRoot ) $exitCode = 0 $version = Get-ModuleVersion try { $script:IN_MEMORY_LOGS.Clear() $config = Get-Configuration -ScriptRootPath $ScriptRootPath -NutanixEnvironment $NutanixEnvironment Initialize-Logger -Config $config Initialize-Folder -Config $config -Path $script:STORAGE_FOLDER_NAME | Out-Null Write-CustomLog -Message "Starting Nutanix Connector $version for environment: $NutanixEnvironment" -Severity 'INFO' Write-CustomLog -Message "Script root path: $ScriptRootPath" -Severity 'DEBUG' Write-CustomLog -Message "Successfully loaded configuration for environment: $NutanixEnvironment" -Severity 'DEBUG' Remove-SpoolStaleFiles -Config $config -MaxFileCount $script:SPOOL_MAX_FILE_COUNT $state = Read-State -Config $config try { Send-PendingHypervisorEvents -State $state -Config $config | Out-Null } catch { Write-CustomLog -Message "Non-fatal error while sending pending spooled data. Continuing to collect fresh data. Details: $($_.Exception.Message)" -Severity 'ERROR' -NoCache } $collection = Invoke-NutanixPrismCentralCollection -Config $config -State $state $summary = $collection.Summary Write-CustomLog -Message "Prism Central collection completed. Hosts=$($summary.Hosts) VMs=$($summary.Vms) Duration=$($summary.DurationSeconds)s" -Severity 'INFO' if ($null -ne $collection.Payload -and $collection.Payload.data.Count -gt 0) { try { Send-VirtualMachines -Config $config -Payload $collection.Payload | Out-Null } catch { Write-CustomLog -Message "Virtual machines step failed. Details: $($_.Exception.Message)" -Severity 'ERROR' } try { # The current payload was spooled by collection; ordered delivery acknowledges it only on success. Send-PendingHypervisorEvents -State $state -Config $config | Out-Null } catch { Write-CustomLog -Message "Non-fatal error while sending current payload. Data remains spooled. Details: $($_.Exception.Message)" -Severity 'ERROR' -NoCache } } } catch { $exitCode = 1 Write-CustomLog -Message "Error in Nutanix Connector: $_" -Severity 'ERROR' } finally { if ($null -ne $config -and $null -ne $config.NexthinkAPI) { try { Send-Logs -NutanixEnvironment $NutanixEnvironment ` -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 } |