Files
DeployCenter/Modules/VersionCheck.psm1
T
benoit a765701fed Correction de la façon de désactiver Bitlocker
Désactivation du délai écran noir sur secteur
Suppression de unattend.xml qui reste par endroit avec le mot de passe admin
Mise en place du numéro de version dans le pied de page à droite.
Reste à finaliser le contrôle de mise à jour disponible.
2026-10-19 20:44:58 +02:00

79 lines
3.1 KiB
PowerShell

# DeployCenter - asynchronous Gitea release check
# Compatible with Windows PowerShell 5.1
function ConvertTo-DeployCenterComparableVersion {
[CmdletBinding()]
param([Parameter(Mandatory=$true)][string]$VersionText)
if ($VersionText -notmatch '(?i)(?:^|[-_])v?(?<Numeric>\d+(?:\.\d+){1,3})(?=$|[-+])') {
return $null
}
$parts = @($Matches.Numeric.Split('.'))
while ($parts.Count -lt 4) { $parts += '0' }
try { return [version]::Parse(($parts -join '.')) } catch { return $null }
}
function Start-DeployCenterVersionCheck {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)][string]$CurrentVersion,
[Parameter(Mandatory=$true)][string]$ReleaseApiUrl
)
try {
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor [System.Net.SecurityProtocolType]::Tls12
$request = [System.Net.HttpWebRequest]::Create($ReleaseApiUrl)
$request.Method = 'GET'
$request.Accept = 'application/json'
$request.UserAgent = 'DeployCenter-VersionCheck/1.0'
$request.Timeout = 4000
$request.ReadWriteTimeout = 4000
$request.KeepAlive = $false
$asyncResult = $request.BeginGetResponse($null, $null)
return [pscustomobject]@{
CurrentVersion = $CurrentVersion
Request = $request
AsyncResult = $asyncResult
Completed = $false
Update = $null
}
} catch {
# This optional check must never interrupt startup or deployment.
return $null
}
}
function Complete-DeployCenterVersionCheck {
[CmdletBinding()]
param([Parameter(Mandatory=$true)]$Check)
if ($Check.Completed -or -not $Check.AsyncResult.IsCompleted) { return $null }
$Check.Completed = $true
$response = $null
$reader = $null
try {
$response = [System.Net.HttpWebResponse]$Check.Request.EndGetResponse($Check.AsyncResult)
if ([int]$response.StatusCode -ne 200) { return $null }
$reader = New-Object System.IO.StreamReader($response.GetResponseStream())
$release = ConvertFrom-Json -InputObject $reader.ReadToEnd() -ErrorAction Stop
if ($release.draft -or [string]::IsNullOrWhiteSpace([string]$release.tag_name)) { return $null }
$current = ConvertTo-DeployCenterComparableVersion -VersionText ([string]$Check.CurrentVersion)
$latest = ConvertTo-DeployCenterComparableVersion -VersionText ([string]$release.tag_name)
if ($null -eq $current -or $null -eq $latest -or $latest -le $current) { return $null }
$Check.Update = [pscustomobject]@{
CurrentVersion = [string]$Check.CurrentVersion
LatestVersion = [string]$release.tag_name
}
return $Check.Update
} catch {
# A network/API failure simply leaves the local version visible.
return $null
} finally {
if ($null -ne $reader) { $reader.Dispose() }
if ($null -ne $response) { $response.Dispose() }
}
}
Export-ModuleMember -Function Start-DeployCenterVersionCheck, Complete-DeployCenterVersionCheck