Add WAU AutoUpdate support

pull/19/head
Romain 2022-03-07 02:35:40 +01:00
parent f3a06fd3c9
commit f7d5a19c06
6 changed files with 131 additions and 8 deletions

View File

@ -14,7 +14,10 @@ Install Winget-AutoUpdate and prerequisites silently
Specify Winget-AutoUpdate installation localtion. Default: C:\ProgramData\Winget-AutoUpdate\
.PARAMETER DoNotUpdate
Do not run Winget-autoupdate after installation. By default, Winget-AutoUpdate is run just after installation.
Do not run Winget-AutoUpdate after installation. By default, Winget-AutoUpdate is run just after installation.
.PARAMETER DisableWAUAutoUpdate
Disable Winget-AutoUpdate update checking. By default, WAU auto update if new version is available on Github.
.EXAMPLE
.\winget-install-and-update.ps1 -Silent -DoNotUpdate
@ -24,7 +27,8 @@ Do not run Winget-autoupdate after installation. By default, Winget-AutoUpdate i
param(
[Parameter(Mandatory=$False)] [Alias('S')] [Switch] $Silent = $false,
[Parameter(Mandatory=$False)] [Alias('Path')] [String] $WingetUpdatePath = "$env:ProgramData\Winget-AutoUpdate",
[Parameter(Mandatory=$False)] [Switch] $DoNotUpdate = $false
[Parameter(Mandatory=$False)] [Switch] $DoNotUpdate = $false,
[Parameter(Mandatory=$False)] [Switch] $DisableWAUAutoUpdate = $false
)
@ -117,6 +121,15 @@ function Install-WingetAutoUpdate{
$task = New-ScheduledTask -Action $taskAction -Principal $taskUserPrincipal -Settings $taskSettings
Register-ScheduledTask -TaskName 'Winget-AutoUpdate-Notify' -InputObject $task -Force
# Install config file
[xml]$ConfigXML = @"
<?xml version="1.0"?>
<app>
<WAUautoupdate>$(!($DisableWAUAutoUpdate))</WAUautoupdate>
</app>
"@
$ConfigXML.Save("$WingetUpdatePath\config\config.xml")
Write-host "`nInstallation succeeded!" -ForegroundColor Green
Start-sleep 1

View File

@ -0,0 +1,7 @@
<?xml version="1.0"?>
<app>
<name>Winget-AutoUpdate (WAU)</name>
<version>1.4.0</version>
<author>Romanitho</author>
<info>https://github.com/Romanitho/Winget-AutoUpdate</info>
</app>

View File

@ -2,7 +2,7 @@
<outputs>
<output id="0">
<!--Check network connection-->
<title>Prüfen Sie Ihre Internet Verbindung</title>
<title>Prüfen Sie Ihre Internet Verbindung.</title>
<!--Unable to check for software updates at this time!-->
<message>Es konnte nicht nach Updates gesucht werden!</message>
</output>

View File

@ -2,13 +2,13 @@
<outputs>
<output id="0">
<!--Check network connection-->
<title>Check network connection</title>
<title>Check network connection.</title>
<!--Unable to check for software updates at this time!-->
<message>Unable to check for software updates at this time!</message>
</output>
<output id="1">
<!--No internet connction-->
<title>No internet connction!</title>
<title>No internet connction.</title>
<!--Updates could not be verified-->
<message>Updates could not be verified.</message>
</output>

View File

@ -2,13 +2,13 @@
<outputs>
<output id="0">
<!--Check network connection-->
<title>Vérifiez votre connexion réseau</title>
<title>Vérifiez votre connexion réseau.</title>
<!--Unable to check for software updates at this time!-->
<message>Impossible de vérifier les mises à jours logicielles pour le moment !</message>
</output>
<output id="1">
<!--No internet connction-->
<title>Aucune connexion réseau</title>
<title>Aucune connexion réseau.</title>
<!--Updates could not be verified-->
<message>Les mises à jour logicielles n'ont pas pu être vérifiées !</message>
</output>

View File

@ -57,7 +57,7 @@ function Write-Log ($LogMsg,$LogColor = "White") {
function Start-NotifTask ($Title,$Message,$MessageType,$Balise) {
#Add XML variables
#Add XML variables
[xml]$ToastTemplate = @"
<toast launch="ms-get-started://redirect?id=apps_action">
<visual>
@ -228,6 +228,103 @@ function Get-ExcludedApps{
}
}
function Start-WAUUpdateCheck{
#Get AutoUpdate status
[xml]$UpdateStatus = Get-Content "$WorkingDir\config\config.xml" -Encoding UTF8 -ErrorAction SilentlyContinue
$AutoUpdateStatus = $UpdateStatus.app.autoupdate
#Check if AutoUpdate is enabled
if ($AutoUpdateStatus -eq $false){
Write-Log "WAU Current version: $CurrentVersion. AutoUpdate is disabled." "Cyan"
return $false
}
#If enabled, check online available version
else{
#Get Github latest version
$WAUurl = 'https://api.github.com/repos/Romanitho/Winget-AutoUpdate/releases/latest'
$LatestVersion = (Invoke-WebRequest $WAUurl | ConvertFrom-Json)[0].tag_name
[version]$AvailableVersion = $LatestVersion.Replace("v","")
#Get current installed version
[xml]$About = Get-Content "$WorkingDir\config\about.xml" -Encoding UTF8 -ErrorAction SilentlyContinue
[version]$CurrentVersion = $About.app.version
#If newer version is avalable, return $True
if ($AvailableVersion -gt $CurrentVersion){
Write-Log "WAU Current version: $CurrentVersion. Version $AvailableVersion is available." "Yellow"
return $true
}
else{
Write-Log "WAU Current version: $CurrentVersion. Up to date." "Green"
return $false
}
}
}
function Update-WAU{
#Get WAU Github latest version
$WAUurl = 'https://api.github.com/repos/Romanitho/Winget-AutoUpdate/releases/latest'
$LatestVersion = (Invoke-WebRequest $WAUurl | ConvertFrom-Json)[0].tag_name
#Send available update notification
$Title = $NotifLocale.local.outputs.output[2].title -f "Winget-AutoUpdate"
$Message = $NotifLocale.local.outputs.output[2].message -f $CurrentVersion, $LatestVersion
$MessageType = "info"
$Balise = "Winget-AutoUpdate"
Start-NotifTask $Title $Message $MessageType $Balise
#Run WAU update
try{
#Force to create a zip file
$ZipFile = "$WorkingDir\WAU_update.zip"
New-Item $ZipFile -ItemType File -Force | Out-Null
#Download the zip
Write-Log "Starting downloading the GitHub Repository"
Invoke-RestMethod -Uri "$($WAUurl)/zipball/$($LatestVersion)" -OutFile $ZipFile
Write-Log 'Download finished'
#Extract Zip File
Write-Log "Starting unzipping the WAU GitHub Repository"
$location = "$WorkingDir\WAU_update"
Expand-Archive -Path $ZipFile -DestinationPath $location -Force
Get-ChildItem -Path $location -Recurse | Unblock-File
Write-Log "Unzip finished"
$TempPath = Resolve-Path "$location\Romanitho-Winget-AutoUpdate*\Winget-AutoUpdate\"
Copy-Item -Path "$TempPath\*" -Destination ".\" -Recurse -Force
#Remove update zip file
Write-Log "Cleaning temp files"
Remove-Item -Path $ZipFile -Force -ErrorAction SilentlyContinue
#Remove update folder
Remove-Item -Path $location -Recurse -Force -ErrorAction SilentlyContinue
#Set new version to conf.xml
[xml]$XMLconf = Get-content "$WorkingDir\config\about.xml" -Encoding UTF8 -ErrorAction SilentlyContinue
$XMLconf.app.version = $LatestVersion.Replace("v","")
$XMLconf.Save("$WorkingDir\config\about.xml")
#Send success Notif
$Title = $NotifLocale.local.outputs.output[3].title -f "Winget-AutoUpdate"
$Message = $NotifLocale.local.outputs.output[3].message -f $LatestVersion
$MessageType = "success"
$Balise = "Winget-AutoUpdate"
Start-NotifTask $Title $Message $MessageType $Balise
#Rerun with newer version
Get-ScheduledTask -TaskName "Winget-AutoUpdate" -ErrorAction SilentlyContinue | Start-ScheduledTask -ErrorAction SilentlyContinue
exit
}
catch{
#Send Error Notif
$Title = $NotifLocale.local.outputs.output[4].title -f "Winget-AutoUpdate"
$Message = $NotifLocale.local.outputs.output[4].message
$MessageType = "error"
$Balise = "Winget-AutoUpdate"
Start-NotifTask $Title $Message $MessageType $Balise
Write-Log "WAU Update failed"
}
}
<# MAIN #>
@ -236,6 +333,12 @@ Init
#Check network connectivity
if (Test-Network){
#Check if WAU is up to date
$CheckWAUupdate = Start-WAUUpdateCheck
#If AutoUpdate is enabled and Update is avalaible, then run WAU update
if ($CheckWAUupdate){
Update-WAU
}
#Get exclude apps list
$toSkip = Get-ExcludedApps