src/Private/Test-ForModuleUpdate.ps1

function Test-ForModuleUpdate {
    [cmdletbinding()]            
    param()
    $ModuleName = "M365.Toolkit"
    $checkedVersion = (Get-Variable -Name M365ToolkitCheckedVersion -Scope Global -ErrorAction SilentlyContinue).Value
    Write-Verbose "Checked Version: $checkedVersion"
    if ($checkedVersion -ne "Yes") {
        $currentVersion = ((Get-Module | Where-Object { $_.Name -eq $ModuleName })[0] | Select-Object Version).Version.ToString()
        Write-Verbose "Current Version: $currentVersion"
        # PowerShell TestGallery API endpoint for the module
        $Url = "https://www.powershellgallery.com/api/v2/FindPackagesById()?id='$ModuleName'"

        $response = Invoke-RestMethod -Uri $Url -UseBasicParsing
        $latestGalleryVersion = ($response | Sort-Object updated -Descending | Select-Object -First 1).properties.Version
        Write-Verbose "Latest Gallery Version: $latestGalleryVersion"
        if ($currentVersion -eq $latestGalleryVersion) {
            Write-Verbose "You are using the latest version: $($currentVersion.ToString())"
        }
        if ($currentVersion -gt $latestGalleryVersion) {
            Write-Verbose "You are using an pre-release: $($currentVersion.ToString())"
            Write-Host -BackgroundColor Blue -ForegroundColor White "You are using a pre-release version of $($ModuleName)."
            Write-Host -BackgroundColor Blue -ForegroundColor White "Please check the PowerShell Gallery for the latest stable release."
        }
        elseif ($currentVersion -ne $latestGalleryVersion) {
            Write-Verbose "There is a new version available: $($latestGalleryVersion.ToString())"
            Write-Host -BackgroundColor Yellow -ForegroundColor Black "There is a new version of $($ModuleName) available."
            Write-Host -BackgroundColor Yellow -ForegroundColor Black "Please update to the latest version."
        }
        Set-Variable -Name M365ToolkitCheckedVersion -Value "Yes" -Force -Scope Global
    }
}

# SIG # Begin signature block
# MIIHMAYJKoZIhvcNAQcCoIIHITCCBx0CAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCkVNoUPpqtnapf
# oJPwFj0dQMSN4MwGY4wNBLVMCu5gf6CCBBwwggQYMIICgKADAgECAhBH6tQY1Crt
# r02dueiKibmNMA0GCSqGSIb3DQEBCwUAMCQxIjAgBgNVBAMMGU0zNjUuVG9vbGtp
# dCBDb2RlIFNpZ25pbmcwHhcNMjYwNzE2MTY1NjE0WhcNMjcwNzE2MTcwNjEzWjAk
# MSIwIAYDVQQDDBlNMzY1LlRvb2xraXQgQ29kZSBTaWduaW5nMIIBojANBgkqhkiG
# 9w0BAQEFAAOCAY8AMIIBigKCAYEAxQCBRWJ923yIy73AwGWtFvfBL/dZHvwCBO05
# dJopbkHGcCqifl9R21PXr5OIjcEFv16ObYL23cPwZaNKCiejuiU32MHwidYHU1k5
# AzFpjwW2uwjeA7Hip3cURwoeOH/LzNa/xNTBRiO70M7gunZCm+FixDcPKf66Tvb1
# iM6pbOFmJvzbGjFqKM6mQRofaCPU89SHW5y43HyZNdiWsJTN4TsWj96Rps4fKhh2
# gToexqi0GhLHhLtVQ8ZxMic6w0C9sCWhYBl3kw1OJdaa/MVBdVAXDOIL0HIG8jOa
# l1x67U1LihXEw1hdc3YabhvSYZ5ZXPV1AZ2z6+Qa0EL9XlJWqBkn0rO6sZB1IkOo
# gfeTxVuI6SjhqpW6QrAFFJzb81qd0dDWmmuVka1yoWEic7naZpDfuh3JZPOUilE1
# Wv3qhBDYN5qg1qXeh0RMosR8rMfKjE8CFvsB7LTibom+22in1x16vmIiv9ep5HNc
# eS0hRa/84+vmXQ8R6hN8x+oWbG8NAgMBAAGjRjBEMA4GA1UdDwEB/wQEAwIHgDAT
# BgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUu9RWiOCtUYtlrLgwzVDsor7P
# p88wDQYJKoZIhvcNAQELBQADggGBAKJksJX6tgjdng//9wRM2ztQn8breDnY/Zki
# 8iXrC94sqCYoYg1lT0pVHZq1ZHpdUNh/xQnjP9asbIqgUt0YiCIASCONV2nM2wyK
# VjrvxaC08xefuHiO/R6Uc9sDW38mID+gDoAmswmB9JV5qm+j8b4hw3vcwuUe3nla
# 5bn3YoKXLY4/YJjHNA62TmhYNfs7iwdk2vyH/dCvD35LdBhP/y2ChmOxzI1aSp4L
# c65zCFVDPzw1IED/5q9NM48QUVDgVAX6VNuocjXZpWd7fHf7KFLRJSExXtaYQCdk
# hBSITzd5WBT2opKF02TrTyc5h1zCTr6HU+1Eqr92fvEGfqk4yYSt4plyqbm6Unnq
# gEgwDqlgm9ZNA8hzorcoxSetVVZ8z+50KB55JRTENZ/5kOJWzPtoIA+PdmFvg3wU
# jQHhO6C32rdVUk+j1hI1zL6sR8gYn5VmLPVjfs49yKf+2t3iDsaYVRNawOqHrMZj
# g59c2M2hT5D6krLsI8r3F/t3YfHbKjGCAmowggJmAgEBMDgwJDEiMCAGA1UEAwwZ
# TTM2NS5Ub29sa2l0IENvZGUgU2lnbmluZwIQR+rUGNQq7a9Nnbnoiom5jTANBglg
# hkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3
# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV
# MC8GCSqGSIb3DQEJBDEiBCB8O7lqZ9hHRVx0GHviWGSJD4F6eY6JXZlpnc6qKoEC
# STANBgkqhkiG9w0BAQEFAASCAYCNLhSniGEpphECiGYzngtx8zXfpm0pNBo/ji3a
# QRsm5zcA8MXurpkHlYkx66Jc1MOdnJuhayXDL9sTaHyyiANPuTusOX+0UgcaAOit
# oC8R1VQPEUK6OTujPKj31nz+wtXPkLIYD55a1/AwyJXqL8JC7tIMINK41v1oQtnp
# NUHIBbdwH6opNG76ESjza6derYAgL/vSy4rXEDmrNxlW3nmNJ5eH3Pic8u8EbFUB
# 8LLIn7Kg+r4JHCDUVohOKi7WIUMc9LoJ9syHcW4inBcBlX7RonlRGR4gLXWqg69M
# j1Efbz/tF3IFKNprFZXBflkY29N86vlnR7xzamjATbPjgxdGRJkxbwgKcunT+O+I
# urSoMb30UeWydmssdtdrT7YpLDtZ1YvlyeUJWcYVrzoIGq5JjS+6OTUHCoJmVSBW
# z/W3SHqPFsku0BajAfyQ/S1LmOEAExF0olRLvKThzsgodEkbmBdtxJPZZiz1vR8L
# oKZ/9Xc0GSoO9GdiSXKV3Mt9d+k=
# SIG # End signature block