Private/Update-BackgroundJob.ps1



function Update-BackgroundJob {

    <#
    .SYNOPSIS
    Expensive Checks are put into the background so they are not finished when the module is loaded
 
    #>


    [CmdletBinding()]
    param()

    If ( $Script:backgroundJobs.Count -gt 0 ) {

        # Wait for the jobs to complete (optional, depending on your needs)
        Wait-Job -Job $Script:backgroundJobs | Out-Null

        $jobsToRemove = @()
        $Script:backgroundJobs | ForEach-Object {

            $job = $_
            $results = Receive-Job -Job $job

            switch ($job.Name) {

                "InstalledModule" {

                    $Script:installedModules = $results

                    # Check if PackageManagement and PowerShellGet are available
                    $Script:installedModules | where-object { $_.Name -eq "PackageManagement" } | ForEach-Object {
                        $Script:packageManagement = $_.Version.ToString()
                    }
                    $Script:installedModules | where-object { $_.Name -eq "PowerShellGet" } | ForEach-Object {
                        $Script:powerShellGet = $_.Version.ToString()
                    }

                    $jobsToRemove += $job

                }

                default {
                    Write-Warning "Unknown job: $($job.Name)"
                }

            }

        }

        # Clean up the job
        $jobsToRemove | ForEach-Object {
            Remove-Job -Job $_
            $Script:backgroundJobs.Remove($_)
        }

    }


}