diff --git a/Winget-AutoUpdate-Install.ps1 b/Winget-AutoUpdate-Install.ps1
index 79d3261..bc1db00 100644
--- a/Winget-AutoUpdate-Install.ps1
+++ b/Winget-AutoUpdate-Install.ps1
@@ -91,78 +91,107 @@
#>
[CmdletBinding()]
-param(
- [Alias('S')] [Switch] $Silent = $false,
- [Alias('Path')] [String] $WingetUpdatePath = "$env:ProgramData\Winget-AutoUpdate",
- [Alias('List')] [String] $ListPath,
- [Alias('Mods')] [String] $ModsPath,
- [Alias('AzureBlobURL')] [String] $AzureBlobSASURL,
- [Switch] $DoNotUpdate = $false,
- [Switch] $DisableWAUAutoUpdate = $false,
- [Switch] $RunOnMetered = $false,
- [Switch] $Uninstall = $false,
- [Switch] $NoClean = $false,
- [Switch] $DesktopShortcut = $false,
- [Switch] $StartMenuShortcut = $false,
- [Switch] $UseWhiteList = $false,
- [ValidateSet('Full', 'SuccessOnly', 'None')] [String] $NotificationLevel = 'Full',
- [Switch] $UpdatesAtLogon = $false,
- [ValidateSet('Daily', 'BiDaily', 'Weekly', 'BiWeekly', 'Monthly', 'Never')] [String] $UpdatesInterval = 'Daily',
- [DateTime] $UpdatesAtTime = ('06am'),
- [Switch] $BypassListForUsers = $false,
- [Switch] $InstallUserContext = $false,
- [ValidateRange(0, 99)] [int] $MaxLogFiles = 3,
- [long] $MaxLogSize = 1048576 # in bytes, default is 1048576 = 1 MB
+param (
+ [Alias('S')]
+ [Switch]
+ $Silent = $false,
+ [Alias('Path')]
+ [String]
+ $WingetUpdatePath = "$env:ProgramData\Winget-AutoUpdate",
+ [Alias('List')]
+ [String]
+ $ListPath,
+ [Alias('Mods')]
+ [String]
+ $ModsPath,
+ [Alias('AzureBlobURL')]
+ [String]
+ $AzureBlobSASURL,
+ [Switch]
+ $DoNotUpdate = $false,
+ [Switch]
+ $DisableWAUAutoUpdate = $false,
+ [Switch]
+ $RunOnMetered = $false,
+ [Switch]
+ $Uninstall = $false,
+ [Switch]
+ $NoClean = $false,
+ [Switch]
+ $DesktopShortcut = $false,
+ [Switch]
+ $StartMenuShortcut = $false,
+ [Switch]
+ $UseWhiteList = $false,
+ [ValidateSet('Full', 'SuccessOnly', 'None')]
+ [String]
+ $NotificationLevel = 'Full',
+ [Switch]
+ $UpdatesAtLogon = $false,
+ [ValidateSet('Daily', 'BiDaily', 'Weekly', 'BiWeekly', 'Monthly', 'Never')]
+ [String]
+ $UpdatesInterval = 'Daily',
+ [DateTime]
+ $UpdatesAtTime = ('06am'),
+ [Switch]
+ $BypassListForUsers = $false,
+ [Switch]
+ $InstallUserContext = $false,
+ [ValidateRange(0, 99)]
+ [int]
+ $MaxLogFiles = 3,
+ [long]
+ $MaxLogSize = 1048576 # in bytes, default is 1048576 = 1 MB
)
<# FUNCTIONS #>
-function Install-Prerequisites
-{
+function Install-Prerequisites
+{
Write-Host -Object "`nChecking prerequisites..." -ForegroundColor Yellow
-
+
#Check if Visual C++ 2019 or 2022 installed
$Visual2019 = 'Microsoft Visual C++ 2015-2019 Redistributable*'
$Visual2022 = 'Microsoft Visual C++ 2015-2022 Redistributable*'
$path = Get-Item HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object -FilterScript {
- $_.GetValue('DisplayName') -like $Visual2019 -or $_.GetValue('DisplayName') -like $Visual2022
+ $_.GetValue('DisplayName') -like $Visual2019 -or $_.GetValue('DisplayName') -like $Visual2022
}
-
+
#If not installed, ask for installation
- if (!($path))
+ if (!($path))
{
#If -silent option, force installation
- if ($Silent)
+ if ($Silent)
{
$InstallApp = 1
}
- else
+ else
{
#Ask for installation
$MsgBoxTitle = 'Winget Prerequisites'
$MsgBoxContent = 'Microsoft Visual C++ 2015-2022 is required. Would you like to install it?'
$MsgBoxTimeOut = 60
$MsgBoxReturn = (New-Object -ComObject 'Wscript.Shell').Popup($MsgBoxContent, $MsgBoxTimeOut, $MsgBoxTitle, 4 + 32)
- if ($MsgBoxReturn -ne 7)
+ if ($MsgBoxReturn -ne 7)
{
$InstallApp = 1
}
- else
+ else
{
$InstallApp = 0
}
}
#Install if approved
- if ($InstallApp -eq 1)
+ if ($InstallApp -eq 1)
{
- try
+ try
{
- if ((Get-CimInstance Win32_OperatingSystem).OSArchitecture -like '*64*')
+ if ((Get-CimInstance Win32_OperatingSystem).OSArchitecture -like '*64*')
{
$OSArch = 'x64'
}
- else
+ else
{
$OSArch = 'x86'
}
@@ -176,247 +205,247 @@ function Install-Prerequisites
Remove-Item $Installer -ErrorAction Ignore
Write-Host -Object 'MS Visual C++ 2015-2022 installed successfully' -ForegroundColor Green
}
- catch
+ catch
{
Write-Host -Object 'MS Visual C++ 2015-2022 installation failed.' -ForegroundColor Red
Start-Sleep -Seconds 3
}
}
- else
+ else
{
Write-Host -Object '-> MS Visual C++ 2015-2022 will not be installed.' -ForegroundColor Magenta
}
}
- else
+ else
{
Write-Host -Object 'Prerequisites checked. OK' -ForegroundColor Green
}
}
-function Install-WinGet
-{
+function Install-WinGet
+{
Write-Host -Object "`nChecking if Winget is installed" -ForegroundColor Yellow
-
+
#Check Package Install
$TestWinGet = Get-AppxProvisionedPackage -Online | Where-Object -FilterScript {
- $_.DisplayName -eq 'Microsoft.DesktopAppInstaller'
+ $_.DisplayName -eq 'Microsoft.DesktopAppInstaller'
}
-
+
#Current: v1.5.2201 = 1.20.2201.0 = 2023.808.2243.0
- If ([Version]$TestWinGet.Version -ge '2023.808.2243.0')
+ if ([Version]$TestWinGet.Version -ge '2023.808.2243.0')
{
Write-Host -Object 'Winget is Installed' -ForegroundColor Green
}
- Else
- {
+ else
+ {
Write-Host -Object '-> Winget is not installed:'
-
+
#Check if $WingetUpdatePath exist
- if (!(Test-Path $WingetUpdatePath))
+ if (!(Test-Path $WingetUpdatePath))
{
$null = New-Item -ItemType Directory -Force -Path $WingetUpdatePath
}
-
+
#Downloading and Installing Dependencies in SYSTEM context
- if (!(Get-AppxPackage -Name 'Microsoft.UI.Xaml.2.7'))
+ if (!(Get-AppxPackage -Name 'Microsoft.UI.Xaml.2.7'))
{
Write-Host -Object '-> Downloading Microsoft.UI.Xaml.2.7...'
$UiXamlUrl = 'https://www.nuget.org/api/v2/package/Microsoft.UI.Xaml/2.7.0'
$UiXamlZip = "$WingetUpdatePath\Microsoft.UI.XAML.2.7.zip"
Invoke-RestMethod -Uri $UiXamlUrl -OutFile $UiXamlZip
Expand-Archive -Path $UiXamlZip -DestinationPath "$WingetUpdatePath\extracted" -Force
- try
+ try
{
Write-Host -Object '-> Installing Microsoft.UI.Xaml.2.7...'
$null = Add-AppxProvisionedPackage -Online -PackagePath "$WingetUpdatePath\extracted\tools\AppX\x64\Release\Microsoft.UI.Xaml.2.7.appx" -SkipLicense
Write-Host -Object 'Microsoft.UI.Xaml.2.7 installed successfully' -ForegroundColor Green
}
- catch
+ catch
{
Write-Host -Object 'Failed to intall Wicrosoft.UI.Xaml.2.7...' -ForegroundColor Red
}
Remove-Item -Path $UiXamlZip -Force
Remove-Item -Path "$WingetUpdatePath\extracted" -Force -Recurse
}
-
- if (!(Get-AppxPackage -Name 'Microsoft.VCLibs.140.00.UWPDesktop'))
+
+ if (!(Get-AppxPackage -Name 'Microsoft.VCLibs.140.00.UWPDesktop'))
{
Write-Host -Object '-> Downloading Microsoft.VCLibs.140.00.UWPDesktop...'
$VCLibsUrl = 'https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx'
$VCLibsFile = "$WingetUpdatePath\Microsoft.VCLibs.x64.14.00.Desktop.appx"
Invoke-RestMethod -Uri $VCLibsUrl -OutFile $VCLibsFile
- try
+ try
{
Write-Host -Object '-> Installing Microsoft.VCLibs.140.00.UWPDesktop...'
$null = Add-AppxProvisionedPackage -Online -PackagePath $VCLibsFile -SkipLicense
Write-Host -Object 'Microsoft.VCLibs.140.00.UWPDesktop installed successfully' -ForegroundColor Green
}
- catch
+ catch
{
Write-Host -Object 'Failed to intall Microsoft.VCLibs.140.00.UWPDesktop...' -ForegroundColor Red
}
Remove-Item -Path $VCLibsFile -Force
}
-
+
#Download WinGet MSIXBundle
Write-Host -Object '-> Downloading Winget MSIXBundle for App Installer...'
$WinGetURL = 'https://github.com/microsoft/winget-cli/releases/download/v1.5.2201/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle'
$WebClient = New-Object -TypeName System.Net.WebClient
$WebClient.DownloadFile($WinGetURL, "$WingetUpdatePath\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle")
-
+
#Install WinGet MSIXBundle in SYSTEM context
- try
+ try
{
Write-Host -Object '-> Installing Winget MSIXBundle for App Installer...'
$null = Add-AppxProvisionedPackage -Online -PackagePath "$WingetUpdatePath\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle" -SkipLicense
Write-Host -Object 'Winget MSIXBundle for App Installer installed successfully' -ForegroundColor Green
}
- catch
+ catch
{
Write-Host -Object 'Failed to intall Winget MSIXBundle for App Installer...' -ForegroundColor Red
}
-
+
#Remove WinGet MSIXBundle
Remove-Item -Path "$WingetUpdatePath\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle" -Force -ErrorAction Continue
}
}
-function Install-WingetAutoUpdate
-{
+function Install-WingetAutoUpdate
+{
Write-Host -Object "`nInstalling WAU..." -ForegroundColor Yellow
-
- try
+
+ try
{
#Copy files to location (and clean old install)
- if (!(Test-Path $WingetUpdatePath))
+ if (!(Test-Path $WingetUpdatePath))
{
$null = New-Item -ItemType Directory -Force -Path $WingetUpdatePath
}
- else
+ else
{
- if (!$NoClean)
+ if (!$NoClean)
{
Remove-Item -Path "$WingetUpdatePath\*" -Exclude *.log -Recurse -Force
}
- else
+ else
{
#Keep critical files
Get-ChildItem -Path $WingetUpdatePath -Exclude *.txt, mods, logs | Remove-Item -Recurse -Force
}
}
Copy-Item -Path "$PSScriptRoot\Winget-AutoUpdate\*" -Destination $WingetUpdatePath -Recurse -Force -ErrorAction SilentlyContinue
-
+
#White List or Black List apps
- if ($UseWhiteList)
+ if ($UseWhiteList)
{
- if (!$NoClean)
+ if (!$NoClean)
{
- if ((Test-Path -Path "$PSScriptRoot\included_apps.txt"))
+ if ((Test-Path -Path "$PSScriptRoot\included_apps.txt"))
{
Copy-Item -Path "$PSScriptRoot\included_apps.txt" -Destination $WingetUpdatePath -Recurse -Force -ErrorAction SilentlyContinue
}
- else
+ else
{
- if (!$ListPath)
+ if (!$ListPath)
{
$null = New-Item -Path $WingetUpdatePath -Name 'included_apps.txt' -ItemType 'file' -ErrorAction SilentlyContinue
}
}
}
- elseif (!(Test-Path -Path "$WingetUpdatePath\included_apps.txt"))
+ elseif (!(Test-Path -Path "$WingetUpdatePath\included_apps.txt"))
{
- if ((Test-Path -Path "$PSScriptRoot\included_apps.txt"))
+ if ((Test-Path -Path "$PSScriptRoot\included_apps.txt"))
{
Copy-Item -Path "$PSScriptRoot\included_apps.txt" -Destination $WingetUpdatePath -Recurse -Force -ErrorAction SilentlyContinue
}
- else
+ else
{
- if (!$ListPath)
+ if (!$ListPath)
{
$null = New-Item -Path $WingetUpdatePath -Name 'included_apps.txt' -ItemType 'file' -ErrorAction SilentlyContinue
}
}
}
}
- else
+ else
{
- if (!$NoClean)
+ if (!$NoClean)
{
Copy-Item -Path "$PSScriptRoot\excluded_apps.txt" -Destination $WingetUpdatePath -Recurse -Force -ErrorAction SilentlyContinue
}
- elseif (!(Test-Path -Path "$WingetUpdatePath\excluded_apps.txt"))
+ elseif (!(Test-Path -Path "$WingetUpdatePath\excluded_apps.txt"))
{
Copy-Item -Path "$PSScriptRoot\excluded_apps.txt" -Destination $WingetUpdatePath -Recurse -Force -ErrorAction SilentlyContinue
}
}
-
+
# Set dummy regkeys for notification name and icon
$null = & "$env:windir\system32\reg.exe" add 'HKCR\AppUserModelId\Windows.SystemToast.Winget.Notification' /v DisplayName /t REG_EXPAND_SZ /d 'Application Update' /f
$null = & "$env:windir\system32\reg.exe" add 'HKCR\AppUserModelId\Windows.SystemToast.Winget.Notification' /v IconUri /t REG_EXPAND_SZ /d %SystemRoot%\system32\@WindowsUpdateToastIcon.png /f
-
+
# Settings for the scheduled task for Updates
$taskAction = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-NoProfile -ExecutionPolicy Bypass -File `"$($WingetUpdatePath)\winget-upgrade.ps1`""
$taskTriggers = @()
- if ($UpdatesAtLogon)
+ if ($UpdatesAtLogon)
{
$taskTriggers += New-ScheduledTaskTrigger -AtLogOn
}
- if ($UpdatesInterval -eq 'Daily')
+ if ($UpdatesInterval -eq 'Daily')
{
$taskTriggers += New-ScheduledTaskTrigger -Daily -At $UpdatesAtTime
}
- elseif ($UpdatesInterval -eq 'BiDaily')
+ elseif ($UpdatesInterval -eq 'BiDaily')
{
$taskTriggers += New-ScheduledTaskTrigger -Daily -At $UpdatesAtTime -DaysInterval 2
}
- elseif ($UpdatesInterval -eq 'Weekly')
+ elseif ($UpdatesInterval -eq 'Weekly')
{
$taskTriggers += New-ScheduledTaskTrigger -Weekly -At $UpdatesAtTime -DaysOfWeek 2
}
- elseif ($UpdatesInterval -eq 'BiWeekly')
+ elseif ($UpdatesInterval -eq 'BiWeekly')
{
$taskTriggers += New-ScheduledTaskTrigger -Weekly -At $UpdatesAtTime -DaysOfWeek 2 -WeeksInterval 2
}
- elseif ($UpdatesInterval -eq 'Monthly')
+ elseif ($UpdatesInterval -eq 'Monthly')
{
$taskTriggers += New-ScheduledTaskTrigger -Weekly -At $UpdatesAtTime -DaysOfWeek 2 -WeeksInterval 4
}
$taskUserPrincipal = New-ScheduledTaskPrincipal -UserId S-1-5-18 -RunLevel Highest
$taskSettings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit 03:00:00
-
+
# Set up the task, and register it
- if ($taskTriggers)
+ if ($taskTriggers)
{
$task = New-ScheduledTask -Action $taskAction -Principal $taskUserPrincipal -Settings $taskSettings -Trigger $taskTriggers
}
- else
+ else
{
$task = New-ScheduledTask -Action $taskAction -Principal $taskUserPrincipal -Settings $taskSettings
}
-
+
$null = Register-ScheduledTask -TaskName 'Winget-AutoUpdate' -InputObject $task -Force
-
- if ($InstallUserContext)
+
+ if ($InstallUserContext)
{
# Settings for the scheduled task in User context
$taskAction = New-ScheduledTaskAction -Execute 'wscript.exe' -Argument "`"$($WingetUpdatePath)\Invisible.vbs`" `"powershell.exe -NoProfile -ExecutionPolicy Bypass -File `"`"`"$($WingetUpdatePath)\winget-upgrade.ps1`"`""
$taskUserPrincipal = New-ScheduledTaskPrincipal -GroupId S-1-5-11
$taskSettings = New-ScheduledTaskSettingsSet -Compatibility Win8 -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit 03:00:00
-
+
# Set up the task for user apps
$task = New-ScheduledTask -Action $taskAction -Principal $taskUserPrincipal -Settings $taskSettings
$null = Register-ScheduledTask -TaskName 'Winget-AutoUpdate-UserContext' -InputObject $task -Force
}
-
+
# Settings for the scheduled task for Notifications
$taskAction = New-ScheduledTaskAction -Execute 'wscript.exe' -Argument "`"$($WingetUpdatePath)\Invisible.vbs`" `"powershell.exe -NoProfile -ExecutionPolicy Bypass -File `"`"`"$($WingetUpdatePath)\winget-notify.ps1`"`""
$taskUserPrincipal = New-ScheduledTaskPrincipal -GroupId S-1-5-11
$taskSettings = New-ScheduledTaskSettingsSet -Compatibility Win8 -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit 00:05:00
-
+
# Set up the task, and register it
$task = New-ScheduledTask -Action $taskAction -Principal $taskUserPrincipal -Settings $taskSettings
$null = Register-ScheduledTask -TaskName 'Winget-AutoUpdate-Notify' -InputObject $task -Force
-
+
#Set task readable/runnable for all users
$scheduler = New-Object -ComObject 'Schedule.Service'
$scheduler.Connect()
@@ -424,7 +453,7 @@ function Install-WingetAutoUpdate
$sec = $task.GetSecurityDescriptor(0xF)
$sec = $sec + '(A;;GRGX;;;AU)'
$task.SetSecurityDescriptor($sec, 0)
-
+
# Configure Reg Key
$regPath = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate'
$null = New-Item $regPath -Force
@@ -443,67 +472,67 @@ function Install-WingetAutoUpdate
{
$null = New-ItemProperty $regPath -Name WAU_UpdatePrerelease -Value 1 -PropertyType DWord -Force
}
- else
+ else
{
$null = New-ItemProperty $regPath -Name WAU_UpdatePrerelease -Value 0 -PropertyType DWord -Force
}
$null = New-ItemProperty $regPath -Name WAU_PostUpdateActions -Value 0 -PropertyType DWord -Force
$null = New-ItemProperty $regPath -Name WAU_MaxLogFiles -Value $MaxLogFiles -PropertyType DWord -Force
$null = New-ItemProperty $regPath -Name WAU_MaxLogSize -Value $MaxLogSize -PropertyType DWord -Force
- if ($DisableWAUAutoUpdate)
+ if ($DisableWAUAutoUpdate)
{
$null = New-ItemProperty $regPath -Name WAU_DisableAutoUpdate -Value 1 -Force
}
- if ($UseWhiteList)
+ if ($UseWhiteList)
{
$null = New-ItemProperty $regPath -Name WAU_UseWhiteList -Value 1 -PropertyType DWord -Force
}
- if (!$RunOnMetered)
+ if (!$RunOnMetered)
{
$null = New-ItemProperty $regPath -Name WAU_DoNotRunOnMetered -Value 1 -PropertyType DWord -Force
}
- if ($ListPath)
+ if ($ListPath)
{
$null = New-ItemProperty $regPath -Name WAU_ListPath -Value $ListPath -Force
}
- if ($ModsPath)
+ if ($ModsPath)
{
$null = New-ItemProperty $regPath -Name WAU_ModsPath -Value $ModsPath -Force
}
- if ($AzureBlobSASURL)
+ if ($AzureBlobSASURL)
{
$null = New-ItemProperty $regPath -Name WAU_AzureBlobSASURL -Value $AzureBlobSASURL -Force
}
- if ($BypassListForUsers)
+ if ($BypassListForUsers)
{
$null = New-ItemProperty $regPath -Name WAU_BypassListForUsers -Value 1 -PropertyType DWord -Force
}
-
+
#Log file and symlink initialization
. "$WingetUpdatePath\functions\Start-Init.ps1"
Start-Init
-
+
#Security check
Write-Host -Object "`nChecking Mods Directory:" -ForegroundColor Yellow
. "$WingetUpdatePath\functions\Invoke-ModsProtect.ps1"
$Protected = Invoke-ModsProtect "$WingetUpdatePath\mods"
- if ($Protected -eq $True)
+ if ($Protected -eq $True)
{
Write-Host -Object "The mods directory is now secured!`n" -ForegroundColor Green
}
- elseif ($Protected -eq $false)
+ elseif ($Protected -eq $false)
{
Write-Host -Object "The mods directory was already secured!`n" -ForegroundColor Green
}
- else
+ else
{
Write-Host -Object "Error: The mods directory couldn't be verified as secured!`n" -ForegroundColor Red
}
-
+
#Create Shortcuts
- if ($StartMenuShortcut)
+ if ($StartMenuShortcut)
{
- if (!(Test-Path -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)"))
+ if (!(Test-Path -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)"))
{
$null = New-Item -ItemType Directory -Force -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)"
}
@@ -511,19 +540,19 @@ function Install-WingetAutoUpdate
Add-Shortcut 'wscript.exe' "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)\WAU - Open logs.lnk" "`"$($WingetUpdatePath)\Invisible.vbs`" `"powershell.exe -NoProfile -ExecutionPolicy Bypass -File `"`"`"$($WingetUpdatePath)\user-run.ps1`" -Logs`"" "${env:SystemRoot}\System32\shell32.dll,-16763" 'Open existing WAU logs...'
Add-Shortcut 'wscript.exe' "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)\WAU - Web Help.lnk" "`"$($WingetUpdatePath)\Invisible.vbs`" `"powershell.exe -NoProfile -ExecutionPolicy Bypass -File `"`"`"$($WingetUpdatePath)\user-run.ps1`" -Help`"" "${env:SystemRoot}\System32\shell32.dll,-24" 'Help for WAU...'
}
-
- if ($DesktopShortcut)
+
+ if ($DesktopShortcut)
{
Add-Shortcut 'wscript.exe' "${env:Public}\Desktop\WAU - Check for updated Apps.lnk" "`"$($WingetUpdatePath)\Invisible.vbs`" `"powershell.exe -NoProfile -ExecutionPolicy Bypass -File `"`"`"$($WingetUpdatePath)\user-run.ps1`"`"" "${env:SystemRoot}\System32\shell32.dll,-16739" 'Manual start of Winget-AutoUpdate (WAU)...'
}
-
+
Write-Host -Object 'WAU Installation succeeded!' -ForegroundColor Green
Start-Sleep -Seconds 1
-
+
#Run Winget ?
Start-WingetAutoUpdate
}
- catch
+ catch
{
Write-Host -Object 'WAU Installation failed! Run me with admin rights' -ForegroundColor Red
Start-Sleep -Seconds 1
@@ -531,31 +560,31 @@ function Install-WingetAutoUpdate
}
}
-function Uninstall-WingetAutoUpdate
-{
+function Uninstall-WingetAutoUpdate
+{
Write-Host -Object "`nUninstalling WAU..." -ForegroundColor Yellow
-
- try
+
+ try
{
#Get registry install location
$InstallLocation = Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate\' -Name InstallLocation
-
+
#Check if installed location exists and delete
- if (Test-Path ($InstallLocation))
- {
- if (!$NoClean)
+ if (Test-Path ($InstallLocation))
+ {
+ if (!$NoClean)
{
Remove-Item $InstallLocation -Force -Recurse
- if (Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-updates.log")
+ if (Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-updates.log")
{
$null = Remove-Item -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-updates.log" -Force -ErrorAction SilentlyContinue
}
- if (Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-install.log")
+ if (Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-install.log")
{
$null = Remove-Item -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-install.log" -Force -ErrorAction SilentlyContinue
}
}
- else
+ else
{
#Keep critical files
Get-ChildItem -Path $InstallLocation -Exclude *.txt, mods, logs | Remove-Item -Recurse -Force
@@ -565,94 +594,90 @@ function Uninstall-WingetAutoUpdate
Get-ScheduledTask -TaskName 'Winget-AutoUpdate-UserContext' -ErrorAction SilentlyContinue | Unregister-ScheduledTask -Confirm:$false
$null = & "$env:windir\system32\reg.exe" delete 'HKCR\AppUserModelId\Windows.SystemToast.Winget.Notification' /f
$null = & "$env:windir\system32\reg.exe" delete 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate' /f
-
- if ((Test-Path -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)"))
+
+ if ((Test-Path -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)"))
{
$null = Remove-Item -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)" -Recurse -Force
}
-
- if ((Test-Path -Path "${env:Public}\Desktop\WAU - Check for updated Apps.lnk"))
+
+ if ((Test-Path -Path "${env:Public}\Desktop\WAU - Check for updated Apps.lnk"))
{
$null = Remove-Item -Path "${env:Public}\Desktop\WAU - Check for updated Apps.lnk" -Force
}
-
+
Write-Host -Object 'Uninstallation succeeded!' -ForegroundColor Green
Start-Sleep -Seconds 1
}
- else
+ else
{
Write-Host -Object "$InstallLocation not found! Uninstallation failed!" -ForegroundColor Red
}
}
- catch
+ catch
{
Write-Host -Object 'Uninstallation failed! Run as admin ?' -ForegroundColor Red
Start-Sleep -Seconds 1
}
}
-function Start-WingetAutoUpdate
+function Start-WingetAutoUpdate
{
#If -DoNotUpdate is true, skip.
- if (!($DoNotUpdate))
+ if (!($DoNotUpdate))
{
#If -Silent, run Winget-AutoUpdate now
- if ($Silent)
+ if ($Silent)
{
$RunWinget = 1
}
#Ask for WingetAutoUpdate
- else
+ else
{
$MsgBoxTitle = 'Winget-AutoUpdate'
$MsgBoxContent = 'Would you like to run Winget-AutoUpdate now?'
$MsgBoxTimeOut = 60
$MsgBoxReturn = (New-Object -ComObject 'Wscript.Shell').Popup($MsgBoxContent, $MsgBoxTimeOut, $MsgBoxTitle, 4 + 32)
- if ($MsgBoxReturn -ne 7)
+ if ($MsgBoxReturn -ne 7)
{
$RunWinget = 1
}
- else
+ else
{
$RunWinget = 0
}
}
- if ($RunWinget -eq 1)
+ if ($RunWinget -eq 1)
{
- try
+ try
{
Write-Host -Object "`nRunning Winget-AutoUpdate..." -ForegroundColor Yellow
Get-ScheduledTask -TaskName 'Winget-AutoUpdate' -ErrorAction SilentlyContinue | Start-ScheduledTask -ErrorAction SilentlyContinue
- while ((Get-ScheduledTask -TaskName 'Winget-AutoUpdate').State -ne 'Ready')
+ while ((Get-ScheduledTask -TaskName 'Winget-AutoUpdate').State -ne 'Ready')
{
Start-Sleep -Seconds 1
}
}
- catch
+ catch
{
Write-Host -Object 'Failed to run Winget-AutoUpdate...' -ForegroundColor Red
}
}
}
- else
+ else
{
Write-Host -Object 'Skip running Winget-AutoUpdate'
}
}
-function Add-Shortcut
-{
+function Add-Shortcut
+{
[CmdletBinding()]
param
(
$Target,
-
$Shortcut,
-
$Arguments,
-
$Icon,
-
$Description
)
$WScriptShell = New-Object -ComObject WScript.Shell
@@ -673,12 +698,12 @@ $WAUVersion = Get-Content -Path "$PSScriptRoot\Winget-AutoUpdate\Version.txt" -E
<# MAIN #>
#If running as a 32-bit process on an x64 system, re-launch as a 64-bit process
-if ("$env:PROCESSOR_ARCHITEW6432" -ne 'ARM64')
+if ("$env:PROCESSOR_ARCHITEW6432" -ne 'ARM64')
{
- if (Test-Path -Path "$($env:windir)\SysNative\WindowsPowerShell\v1.0\powershell.exe")
+ if (Test-Path -Path "$($env:windir)\SysNative\WindowsPowerShell\v1.0\powershell.exe")
{
Start-Process -FilePath "$($env:windir)\SysNative\WindowsPowerShell\v1.0\powershell.exe" -Wait -NoNewWindow -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command $($MyInvocation.line)"
- Exit $lastexitcode
+ exit $lastexitcode
}
}
@@ -695,14 +720,14 @@ Write-Host -Object "`t Winget-AutoUpdate $WAUVersion`n" -Foregro
Write-Host -Object "`t https://github.com/Romanitho/Winget-AutoUpdate`n" -ForegroundColor Magenta
Write-Host -Object "`t________________________________________________________`n`n"
-if (!$Uninstall)
+if (!$Uninstall)
{
Write-Host -Object "Installing WAU to $WingetUpdatePath\"
Install-Prerequisites
Install-WinGet
Install-WingetAutoUpdate
}
-else
+else
{
Write-Host -Object 'Uninstalling WAU...'
Uninstall-WingetAutoUpdate
diff --git a/Winget-AutoUpdate/User-Run.ps1 b/Winget-AutoUpdate/User-Run.ps1
index bec2dea..07910ed 100644
--- a/Winget-AutoUpdate/User-Run.ps1
+++ b/Winget-AutoUpdate/User-Run.ps1
@@ -18,16 +18,18 @@
#>
[CmdletBinding()]
-param(
- [Switch] $Logs = $False,
- [Switch] $Help = $False
+param (
+ [Switch]
+ $Logs = $False,
+ [Switch]
+ $Help = $False
)
-function Test-WAUisRunning
+function Test-WAUisRunning
{
- If (((Get-ScheduledTask -TaskName 'Winget-AutoUpdate' -ErrorAction SilentlyContinue).State -eq 'Running') -or ((Get-ScheduledTask -TaskName 'Winget-AutoUpdate-UserContext' -ErrorAction SilentlyContinue).State -eq 'Running'))
+ if (((Get-ScheduledTask -TaskName 'Winget-AutoUpdate' -ErrorAction SilentlyContinue).State -eq 'Running') -or ((Get-ScheduledTask -TaskName 'Winget-AutoUpdate-UserContext' -ErrorAction SilentlyContinue).State -eq 'Running'))
{
- Return $True
+ return $True
}
}
@@ -47,13 +49,13 @@ Get-NotifLocale
$OnClickAction = ('{0}\logs\updates.log' -f $WorkingDir)
$Button1Text = $NotifLocale.local.outputs.output[11].message
-if ($Logs)
+if ($Logs)
{
- if (Test-Path -Path ('{0}\logs\updates.log' -f $WorkingDir))
+ if (Test-Path -Path ('{0}\logs\updates.log' -f $WorkingDir))
{
Invoke-Item -Path ('{0}\logs\updates.log' -f $WorkingDir)
}
- else
+ else
{
#Not available yet
$Message = $NotifLocale.local.outputs.output[5].message
@@ -61,16 +63,16 @@ if ($Logs)
Start-NotifTask -Message $Message -MessageType $MessageType -UserRun
}
}
-elseif ($Help)
+elseif ($Help)
{
Start-Process -FilePath 'https://github.com/Romanitho/Winget-AutoUpdate'
}
-else
+else
{
- try
+ try
{
# Check if WAU is currently running
- if (Test-WAUisRunning)
+ if (Test-WAUisRunning)
{
$Message = $NotifLocale.local.outputs.output[8].message
$MessageType = 'warning'
@@ -84,13 +86,13 @@ else
$MessageType = 'info'
Start-NotifTask -Message $Message -MessageType $MessageType -Button1Text $Button1Text -Button1Action $OnClickAction -ButtonDismiss -UserRun
# Sleep until the task is done
- While (Test-WAUisRunning)
+ while (Test-WAUisRunning)
{
Start-Sleep -Seconds 3
}
-
+
# Test if there was a list_/winget_error
- if (Test-Path -Path ('{0}\logs\error.txt' -f $WorkingDir) -ErrorAction SilentlyContinue)
+ if (Test-Path -Path ('{0}\logs\error.txt' -f $WorkingDir) -ErrorAction SilentlyContinue)
{
$MessageType = 'error'
$Critical = Get-Content -Path ('{0}\logs\error.txt' -f $WorkingDir) -Raw
@@ -98,14 +100,14 @@ else
$Critical = $Critical.Substring(0, [Math]::Min($Critical.Length, 50))
$Message = ("Critical:`n{0}..." -f $Critical)
}
- else
+ else
{
$MessageType = 'success'
$Message = $NotifLocale.local.outputs.output[9].message
}
Start-NotifTask -Message $Message -MessageType $MessageType -Button1Text $Button1Text -Button1Action $OnClickAction -ButtonDismiss -UserRun
}
- catch
+ catch
{
# Check failed - Just send notification
$Message = $NotifLocale.local.outputs.output[7].message
diff --git a/Winget-AutoUpdate/WAU-Uninstall.ps1 b/Winget-AutoUpdate/WAU-Uninstall.ps1
index c715a9a..089a2a6 100644
--- a/Winget-AutoUpdate/WAU-Uninstall.ps1
+++ b/Winget-AutoUpdate/WAU-Uninstall.ps1
@@ -14,8 +14,9 @@
#>
[CmdletBinding()]
-param(
- [Switch] $NoClean = $false
+param (
+ [Switch]
+ $NoClean = $false
)
Write-Host -Object "`n"
@@ -31,21 +32,21 @@ Write-Host -Object "`t Winget-AutoUpdate`n" -ForegroundColor
Write-Host -Object "`t https://github.com/Romanitho/Winget-AutoUpdate`n" -ForegroundColor Magenta
Write-Host -Object "`t________________________________________________________`n`n"
-try
+try
{
Write-Host -Object 'Uninstalling WAU...' -ForegroundColor Yellow
-
+
# Get registry install location
$InstallLocation = (Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate\' -Name InstallLocation)
-
+
# Check if installed location exists and delete
- if (Test-Path -Path ($InstallLocation))
+ if (Test-Path -Path ($InstallLocation))
{
- if (!$NoClean)
+ if (!$NoClean)
{
$null = (Remove-Item -Path ('{0}\*' -f $InstallLocation) -Force -Confirm:$false -Recurse -Exclude '*.log')
}
- else
+ else
{
# Keep critical files
$null = (Get-ChildItem -Path $InstallLocation -Exclude *.txt, mods, logs | Remove-Item -Recurse -Force -Confirm:$false -ErrorAction SilentlyContinue)
@@ -55,40 +56,40 @@ try
$null = (Get-ScheduledTask -TaskName 'Winget-AutoUpdate-UserContext' -ErrorAction SilentlyContinue | Unregister-ScheduledTask -Confirm:$false)
$null = & "$env:windir\system32\reg.exe" delete 'HKCR\AppUserModelId\Windows.SystemToast.Winget.Notification' /f
$null = & "$env:windir\system32\reg.exe" delete 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate' /f
-
- if (Test-Path -Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate' -ErrorAction SilentlyContinue)
+
+ if (Test-Path -Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate' -ErrorAction SilentlyContinue)
{
$null = & "$env:windir\system32\reg.exe" delete 'HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate' /f
}
-
- if ((Test-Path -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)"))
+
+ if ((Test-Path -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)"))
{
$null = (Remove-Item -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)" -Recurse -Force -Confirm:$false)
}
-
- if ((Test-Path -Path "${env:Public}\Desktop\WAU - Check for updated Apps.lnk"))
+
+ if ((Test-Path -Path "${env:Public}\Desktop\WAU - Check for updated Apps.lnk"))
{
$null = (Remove-Item -Path "${env:Public}\Desktop\WAU - Check for updated Apps.lnk" -Force -Confirm:$false)
}
-
+
# Remove Intune Logs if they are existing
- if (Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-updates.log")
+ if (Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-updates.log")
{
$null = (Remove-Item -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-updates.log" -Force -Confirm:$false -ErrorAction SilentlyContinue)
}
- if (Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-install.log" -ErrorAction SilentlyContinue)
+ if (Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-install.log" -ErrorAction SilentlyContinue)
{
$null = (Remove-Item -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-install.log" -Force -Confirm:$false -ErrorAction SilentlyContinue)
}
-
+
Write-Host -Object 'Uninstallation succeeded!' -ForegroundColor Green
}
- else
+ else
{
Write-Host -Object ('{0} not found! Uninstallation failed!' -f $InstallLocation) -ForegroundColor Red
}
}
-catch
+catch
{
Write-Host -Object "`nUninstallation failed! Run as admin ?" -ForegroundColor Red
}
diff --git a/Winget-AutoUpdate/Winget-Notify.ps1 b/Winget-AutoUpdate/Winget-Notify.ps1
index e6036cf..4164a6f 100644
--- a/Winget-AutoUpdate/Winget-Notify.ps1
+++ b/Winget-AutoUpdate/Winget-Notify.ps1
@@ -4,7 +4,7 @@
$WAUinstalledPath = (Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate\' -Name InstallLocation)
[xml]$NotifConf = (Get-Content -Path "$WAUinstalledPath\config\notif.xml" -Encoding UTF8 -ErrorAction SilentlyContinue)
-if (!($NotifConf))
+if (!($NotifConf))
{
break
}
diff --git a/Winget-AutoUpdate/Winget-Upgrade.ps1 b/Winget-AutoUpdate/Winget-Upgrade.ps1
index f36eb8e..1a9eb3d 100644
--- a/Winget-AutoUpdate/Winget-Upgrade.ps1
+++ b/Winget-AutoUpdate/Winget-Upgrade.ps1
@@ -4,7 +4,9 @@
$Script:WorkingDir = $PSScriptRoot
# Get Functions
-Get-ChildItem -Path "$WorkingDir\functions" | ForEach-Object { . $_.FullName }
+Get-ChildItem -Path "$WorkingDir\functions" | ForEach-Object {
+ . $_.FullName
+}
<# MAIN #>
@@ -18,55 +20,66 @@ Start-Init
$Script:WAUConfig = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate')
#Log running context and more...
-if ($IsSystem) {
- Write-ToLog 'Running in System context'
-
- #Get and set Domain/Local Policies (GPO)
- $ActivateGPOManagement, $ChangedSettings = Get-Policies
- if ($ActivateGPOManagement) {
- Write-ToLog 'Activated WAU GPO Management detected, comparing...'
- if ($null -ne $ChangedSettings -and $ChangedSettings -ne 0) {
- Write-ToLog 'Changed settings detected and applied' 'Yellow'
- }
- else {
- Write-ToLog 'No Changed settings detected' 'Yellow'
- }
- }
-
- # Maximum number of log files to keep. Default is 3. Setting MaxLogFiles to 0 will keep all log files.
- $MaxLogFiles = $WAUConfig.WAU_MaxLogFiles
- if ($null -eq $MaxLogFiles) {
- [int] $MaxLogFiles = 3
- }
- else {
- [int] $MaxLogFiles = $MaxLogFiles
- }
-
- # Maximum size of log file.
- $MaxLogSize = $WAUConfig.WAU_MaxLogSize
- if (!$MaxLogSize) {
- [long] $MaxLogSize = 1048576 # in bytes, default is 1048576 = 1 MB
- }
- else {
- [long] $MaxLogSize = $MaxLogSize
- }
-
- #LogRotation if System
- $LogRotate = Invoke-LogRotation $LogFile $MaxLogFiles $MaxLogSize
- if ($LogRotate -eq $False) {
- Write-ToLog 'An Exception occured during Log Rotation...'
- }
-
- #Run post update actions if necessary if run as System
- if (!($WAUConfig.WAU_PostUpdateActions -eq 0)) {
- Invoke-PostUpdateActions
- }
- #Run Scope Machine funtion if run as System
- $SettingsPath = "$Env:windir\system32\config\systemprofile\AppData\Local\Microsoft\WinGet\Settings\defaultState\settings.json"
- Add-ScopeMachine $SettingsPath
+if ($IsSystem)
+{
+ Write-ToLog 'Running in System context'
+
+ #Get and set Domain/Local Policies (GPO)
+ $ActivateGPOManagement, $ChangedSettings = Get-Policies
+ if ($ActivateGPOManagement)
+ {
+ Write-ToLog 'Activated WAU GPO Management detected, comparing...'
+ if ($null -ne $ChangedSettings -and $ChangedSettings -ne 0)
+ {
+ Write-ToLog 'Changed settings detected and applied' 'Yellow'
+ }
+ else
+ {
+ Write-ToLog 'No Changed settings detected' 'Yellow'
+ }
+ }
+
+ # Maximum number of log files to keep. Default is 3. Setting MaxLogFiles to 0 will keep all log files.
+ $MaxLogFiles = $WAUConfig.WAU_MaxLogFiles
+ if ($null -eq $MaxLogFiles)
+ {
+ [int]$MaxLogFiles = 3
+ }
+ else
+ {
+ [int]$MaxLogFiles = $MaxLogFiles
+ }
+
+ # Maximum size of log file.
+ $MaxLogSize = $WAUConfig.WAU_MaxLogSize
+ if (!$MaxLogSize)
+ {
+ [long]$MaxLogSize = 1048576 # in bytes, default is 1048576 = 1 MB
+ }
+ else
+ {
+ [long]$MaxLogSize = $MaxLogSize
+ }
+
+ #LogRotation if System
+ $LogRotate = Invoke-LogRotation $LogFile $MaxLogFiles $MaxLogSize
+ if ($LogRotate -eq $False)
+ {
+ Write-ToLog 'An Exception occured during Log Rotation...'
+ }
+
+ #Run post update actions if necessary if run as System
+ if (!($WAUConfig.WAU_PostUpdateActions -eq 0))
+ {
+ Invoke-PostUpdateActions
+ }
+ #Run Scope Machine funtion if run as System
+ $SettingsPath = "$Env:windir\system32\config\systemprofile\AppData\Local\Microsoft\WinGet\Settings\defaultState\settings.json"
+ Add-ScopeMachine $SettingsPath
}
-else {
- Write-ToLog 'Running in User context'
+else
+{
+ Write-ToLog 'Running in User context'
}
#Get Notif Locale function
@@ -74,270 +87,331 @@ $LocaleDisplayName = Get-NotifLocale
Write-ToLog "Notification Level: $($WAUConfig.WAU_NotificationLevel). Notification Language: $LocaleDisplayName" 'Cyan'
#Check network connectivity
-if (Test-Network) {
- #Check if Winget is installed and get Winget cmd
- $TestWinget = Get-WingetCmd
-
- if ($TestWinget) {
- #Get Current Version
- $WAUCurrentVersion = $WAUConfig.DisplayVersion
- Write-ToLog "WAU current version: $WAUCurrentVersion"
- if ($IsSystem) {
- #Check if WAU update feature is enabled or not if run as System
- $WAUDisableAutoUpdate = $WAUConfig.WAU_DisableAutoUpdate
- #If yes then check WAU update if run as System
- if ($WAUDisableAutoUpdate -eq 1) {
- Write-ToLog 'WAU AutoUpdate is Disabled.' 'Gray'
+if (Test-Network)
+{
+ #Check if Winget is installed and get Winget cmd
+ $TestWinget = Get-WingetCmd
+
+ if ($TestWinget)
+ {
+ #Get Current Version
+ $WAUCurrentVersion = $WAUConfig.DisplayVersion
+ Write-ToLog "WAU current version: $WAUCurrentVersion"
+ if ($IsSystem)
+ {
+ #Check if WAU update feature is enabled or not if run as System
+ $WAUDisableAutoUpdate = $WAUConfig.WAU_DisableAutoUpdate
+ #If yes then check WAU update if run as System
+ if ($WAUDisableAutoUpdate -eq 1)
+ {
+ Write-ToLog 'WAU AutoUpdate is Disabled.' 'Gray'
+ }
+ else
+ {
+ Write-ToLog 'WAU AutoUpdate is Enabled.' 'Green'
+ #Get Available Version
+ $Script:WAUAvailableVersion = Get-WAUAvailableVersion
+ #Compare
+ if ([version]$WAUAvailableVersion.Replace('-', '.') -ne [version]$WAUCurrentVersion.Replace('-', '.'))
+ {
+ #If new version is available, update it
+ Write-ToLog "WAU Available version: $WAUAvailableVersion" 'Yellow'
+ Update-WAU
}
- else {
- Write-ToLog 'WAU AutoUpdate is Enabled.' 'Green'
- #Get Available Version
- $Script:WAUAvailableVersion = Get-WAUAvailableVersion
- #Compare
- if ([version]$WAUAvailableVersion.Replace('-', '.') -ne [version]$WAUCurrentVersion.Replace('-', '.')) {
- #If new version is available, update it
- Write-ToLog "WAU Available version: $WAUAvailableVersion" 'Yellow'
- Update-WAU
- }
- else {
- Write-ToLog 'WAU is up to date.' 'Green'
- }
+ else
+ {
+ Write-ToLog 'WAU is up to date.' 'Green'
}
-
- #Delete previous list_/winget_error (if they exist) if run as System
- if (Test-Path -Path "$WorkingDir\logs\error.txt") {
- Remove-Item -Path "$WorkingDir\logs\error.txt" -Force
+ }
+
+ #Delete previous list_/winget_error (if they exist) if run as System
+ if (Test-Path -Path "$WorkingDir\logs\error.txt")
+ {
+ Remove-Item -Path "$WorkingDir\logs\error.txt" -Force
+ }
+
+ #Get External ListPath if run as System
+ if ($WAUConfig.WAU_ListPath)
+ {
+ $ListPathClean = $($WAUConfig.WAU_ListPath.TrimEnd(' ', '\', '/'))
+ Write-ToLog "WAU uses External Lists from: $ListPathClean"
+ if ($ListPathClean -ne 'GPO')
+ {
+ $NewList = Test-ListPath $ListPathClean $WAUConfig.WAU_UseWhiteList $WAUConfig.InstallLocation.TrimEnd(' ', '\')
+ if ($ReachNoPath)
+ {
+ Write-ToLog "Couldn't reach/find/compare/copy from $ListPathClean..." 'Red'
+ if ($ListPathClean -notlike 'http*')
+ {
+ if (Test-Path -Path "$ListPathClean" -PathType Leaf)
+ {
+ Write-ToLog 'PATH must end with a Directory, not a File...' 'Red'
+ }
+ }
+ else
+ {
+ if ($ListPathClean -match '_apps.txt')
+ {
+ Write-ToLog 'PATH must end with a Directory, not a File...' 'Red'
+ }
+ }
+ $Script:ReachNoPath = $False
+ }
+ if ($NewList)
+ {
+ Write-ToLog "Newer List downloaded/copied to local path: $($WAUConfig.InstallLocation.TrimEnd(' ', '\'))" 'Yellow'
+ }
+ else
+ {
+ if ($WAUConfig.WAU_UseWhiteList -and (Test-Path -Path "$WorkingDir\included_apps.txt"))
+ {
+ Write-ToLog 'List (white) is up to date.' 'Green'
+ }
+ elseif (!$WAUConfig.WAU_UseWhiteList -and (Test-Path -Path "$WorkingDir\excluded_apps.txt"))
+ {
+ Write-ToLog 'List (black) is up to date.' 'Green'
+ }
+ else
+ {
+ Write-ToLog "Critical: White/Black List doesn't exist, exiting..." 'Red'
+ New-Item -Path "$WorkingDir\logs\error.txt" -Value "White/Black List doesn't exist" -Force
+ exit 1
+ }
+ }
}
-
- #Get External ListPath if run as System
- if ($WAUConfig.WAU_ListPath) {
- $ListPathClean = $($WAUConfig.WAU_ListPath.TrimEnd(' ', '\', '/'))
- Write-ToLog "WAU uses External Lists from: $ListPathClean"
- if ($ListPathClean -ne 'GPO') {
- $NewList = Test-ListPath $ListPathClean $WAUConfig.WAU_UseWhiteList $WAUConfig.InstallLocation.TrimEnd(' ', '\')
- if ($ReachNoPath) {
- Write-ToLog "Couldn't reach/find/compare/copy from $ListPathClean..." 'Red'
- if ($ListPathClean -notlike 'http*') {
- if (Test-Path -Path "$ListPathClean" -PathType Leaf) {
- Write-ToLog 'PATH must end with a Directory, not a File...' 'Red'
- }
- }
- else {
- if ($ListPathClean -match '_apps.txt') {
- Write-ToLog 'PATH must end with a Directory, not a File...' 'Red'
- }
- }
- $Script:ReachNoPath = $False
- }
- if ($NewList) {
- Write-ToLog "Newer List downloaded/copied to local path: $($WAUConfig.InstallLocation.TrimEnd(' ', '\'))" 'Yellow'
- }
- else {
- if ($WAUConfig.WAU_UseWhiteList -and (Test-Path -Path "$WorkingDir\included_apps.txt")) {
- Write-ToLog 'List (white) is up to date.' 'Green'
- }
- elseif (!$WAUConfig.WAU_UseWhiteList -and (Test-Path -Path "$WorkingDir\excluded_apps.txt")) {
- Write-ToLog 'List (black) is up to date.' 'Green'
- }
- else {
- Write-ToLog "Critical: White/Black List doesn't exist, exiting..." 'Red'
- New-Item -Path "$WorkingDir\logs\error.txt" -Value "White/Black List doesn't exist" -Force
- Exit 1
- }
- }
- }
+ }
+
+ #Get External ModsPath if run as System
+ if ($WAUConfig.WAU_ModsPath)
+ {
+ $ModsPathClean = $($WAUConfig.WAU_ModsPath.TrimEnd(' ', '\', '/'))
+ Write-ToLog "WAU uses External Mods from: $ModsPathClean"
+ if ($WAUConfig.WAU_AzureBlobSASURL)
+ {
+ $NewMods, $DeletedMods = Test-ModsPath $ModsPathClean $WAUConfig.InstallLocation.TrimEnd(' ', '\') $WAUConfig.WAU_AzureBlobSASURL.TrimEnd(' ')
}
-
- #Get External ModsPath if run as System
- if ($WAUConfig.WAU_ModsPath) {
- $ModsPathClean = $($WAUConfig.WAU_ModsPath.TrimEnd(' ', '\', '/'))
- Write-ToLog "WAU uses External Mods from: $ModsPathClean"
- if ($WAUConfig.WAU_AzureBlobSASURL) {
- $NewMods, $DeletedMods = Test-ModsPath $ModsPathClean $WAUConfig.InstallLocation.TrimEnd(' ', '\') $WAUConfig.WAU_AzureBlobSASURL.TrimEnd(' ')
- }
- else {
- $NewMods, $DeletedMods = Test-ModsPath $ModsPathClean $WAUConfig.InstallLocation.TrimEnd(' ', '\')
- }
- if ($ReachNoPath) {
- Write-ToLog "Couldn't reach/find/compare/copy from $ModsPathClean..." 'Red'
- $Script:ReachNoPath = $False
- }
- if ($NewMods -gt 0) {
- Write-ToLog "$NewMods newer Mods downloaded/copied to local path: $($WAUConfig.InstallLocation.TrimEnd(' ', '\'))\mods" 'Yellow'
- }
- else {
- if (Test-Path -Path "$WorkingDir\mods\*.ps1") {
- Write-ToLog 'Mods are up to date.' 'Green'
- }
- else {
- Write-ToLog 'No Mods are implemented...' 'Yellow'
- }
- }
- if ($DeletedMods -gt 0) {
- Write-ToLog "$DeletedMods Mods deleted (not externally managed) from local path: $($WAUConfig.InstallLocation.TrimEnd(' ', '\'))\mods" 'Red'
- }
+ else
+ {
+ $NewMods, $DeletedMods = Test-ModsPath $ModsPathClean $WAUConfig.InstallLocation.TrimEnd(' ', '\')
}
-
- #Test if _WAU-mods.ps1 exist: Mods for WAU (if Network is active/any Winget is installed/running as SYSTEM)
- $Mods = "$WorkingDir\mods"
- if (Test-Path -Path "$Mods\_WAU-mods.ps1") {
- Write-ToLog 'Running Mods for WAU...' 'Yellow'
- & "$Mods\_WAU-mods.ps1"
- $ModsExitCode = $LASTEXITCODE
- #If _WAU-mods.ps1 has ExitCode 1 - Re-run WAU
- if ($ModsExitCode -eq 1) {
- Write-ToLog 'Re-run WAU'
- Start-Process -FilePath powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command `"$WorkingDir\winget-upgrade.ps1`""
- Exit
- }
+ if ($ReachNoPath)
+ {
+ Write-ToLog "Couldn't reach/find/compare/copy from $ModsPathClean..." 'Red'
+ $Script:ReachNoPath = $False
}
-
- }
-
- if ($($WAUConfig.WAU_ListPath) -eq 'GPO') {
- $Script:GPOList = $True
- }
-
- #Get White or Black list
- if ($WAUConfig.WAU_UseWhiteList -eq 1) {
- Write-ToLog 'WAU uses White List config'
- $toUpdate = Get-IncludedApps
- $UseWhiteList = $true
- }
- else {
- Write-ToLog 'WAU uses Black List config'
- $toSkip = Get-ExcludedApps
- }
-
- #Fix and count the array if GPO List as ERROR handling!
- if ($GPOList) {
- if ($UseWhiteList) {
- $WhiteList = $toUpdate.GetUpperBound(0)
- if ($null -eq $WhiteList) {
- Write-ToLog "Critical: Whitelist doesn't exist in GPO, exiting..." 'Red'
- New-Item -Path "$WorkingDir\logs\error.txt" -Value "Whitelist doesn't exist in GPO" -Force
- Exit 1
- }
- $toUpdate = $toUpdate.Data
+ if ($NewMods -gt 0)
+ {
+ Write-ToLog "$NewMods newer Mods downloaded/copied to local path: $($WAUConfig.InstallLocation.TrimEnd(' ', '\'))\mods" 'Yellow'
}
- else {
- $BlackList = $toSkip.GetUpperBound(0)
- if ($null -eq $BlackList) {
- Write-ToLog "Critical: Blacklist doesn't exist in GPO, exiting..." 'Red'
- New-Item -Path "$WorkingDir\logs\error.txt" -Value "Blacklist doesn't exist in GPO" -Force
- Exit 1
- }
- $toSkip = $toSkip.Data
+ else
+ {
+ if (Test-Path -Path "$WorkingDir\mods\*.ps1")
+ {
+ Write-ToLog 'Mods are up to date.' 'Green'
+ }
+ else
+ {
+ Write-ToLog 'No Mods are implemented...' 'Yellow'
+ }
}
- }
-
- #Get outdated Winget packages
- Write-ToLog 'Checking application updates on Winget Repository...' 'yellow'
- $outdated = Get-WingetOutdatedApps
-
- #If something unusual happened
- if ($outdated -like 'An unusual*') {
- Write-ToLog "$outdated" 'cyan'
- $outdated = $False
- }
-
- #Run only if $outdated is populated!
- if ($outdated) {
- #Log list of app to update
- foreach ($app in $outdated) {
- #List available updates
- $Log = "-> Available update : $($app.Name). Current version : $($app.Version). Available version : $($app.AvailableVersion)."
- $Log | Write-host
- $Log | out-file -filepath $LogFile -Append
+ if ($DeletedMods -gt 0)
+ {
+ Write-ToLog "$DeletedMods Mods deleted (not externally managed) from local path: $($WAUConfig.InstallLocation.TrimEnd(' ', '\'))\mods" 'Red'
}
-
- #Count good update installations
- $Script:InstallOK = 0
-
- #Trick under user context when -BypassListForUsers is used
- if ($IsSystem -eq $false -and $WAUConfig.WAU_BypassListForUsers -eq 1) {
- Write-ToLog 'Bypass system list in user context is Enabled.'
- $UseWhiteList = $false
- $toSkip = $null
+ }
+
+ #Test if _WAU-mods.ps1 exist: Mods for WAU (if Network is active/any Winget is installed/running as SYSTEM)
+ $Mods = "$WorkingDir\mods"
+ if (Test-Path -Path "$Mods\_WAU-mods.ps1")
+ {
+ Write-ToLog 'Running Mods for WAU...' 'Yellow'
+ & "$Mods\_WAU-mods.ps1"
+ $ModsExitCode = $LASTEXITCODE
+ #If _WAU-mods.ps1 has ExitCode 1 - Re-run WAU
+ if ($ModsExitCode -eq 1)
+ {
+ Write-ToLog 'Re-run WAU'
+ Start-Process -FilePath powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command `"$WorkingDir\winget-upgrade.ps1`""
+ exit
}
-
- #If White List
- if ($UseWhiteList) {
- #For each app, notify and update
- foreach ($app in $outdated) {
- if (($toUpdate -contains $app.Id) -and $($app.Version) -ne 'Unknown') {
- Update-App $app
- }
- #if current app version is unknown
- elseif ($($app.Version) -eq 'Unknown') {
- Write-ToLog "$($app.Name) : Skipped upgrade because current version is 'Unknown'" 'Gray'
- }
- #if app is in "excluded list"
- else {
- Write-ToLog "$($app.Name) : Skipped upgrade because it is not in the included app list" 'Gray'
- }
- }
+ }
+
+ }
+
+ if ($($WAUConfig.WAU_ListPath) -eq 'GPO')
+ {
+ $Script:GPOList = $True
+ }
+
+ #Get White or Black list
+ if ($WAUConfig.WAU_UseWhiteList -eq 1)
+ {
+ Write-ToLog 'WAU uses White List config'
+ $toUpdate = Get-IncludedApps
+ $UseWhiteList = $true
+ }
+ else
+ {
+ Write-ToLog 'WAU uses Black List config'
+ $toSkip = Get-ExcludedApps
+ }
+
+ #Fix and count the array if GPO List as ERROR handling!
+ if ($GPOList)
+ {
+ if ($UseWhiteList)
+ {
+ $WhiteList = $toUpdate.GetUpperBound(0)
+ if ($null -eq $WhiteList)
+ {
+ Write-ToLog "Critical: Whitelist doesn't exist in GPO, exiting..." 'Red'
+ New-Item -Path "$WorkingDir\logs\error.txt" -Value "Whitelist doesn't exist in GPO" -Force
+ exit 1
}
- #If Black List or default
- else {
- #For each app, notify and update
- foreach ($app in $outdated) {
- if (-not ($toSkip -contains $app.Id) -and $($app.Version) -ne 'Unknown') {
- Update-App $app
- }
- #if current app version is unknown
- elseif ($($app.Version) -eq 'Unknown') {
- Write-ToLog "$($app.Name) : Skipped upgrade because current version is 'Unknown'" 'Gray'
- }
- #if app is in "excluded list"
- else {
- Write-ToLog "$($app.Name) : Skipped upgrade because it is in the excluded app list" 'Gray'
- }
- }
+ $toUpdate = $toUpdate.Data
+ }
+ else
+ {
+ $BlackList = $toSkip.GetUpperBound(0)
+ if ($null -eq $BlackList)
+ {
+ Write-ToLog "Critical: Blacklist doesn't exist in GPO, exiting..." 'Red'
+ New-Item -Path "$WorkingDir\logs\error.txt" -Value "Blacklist doesn't exist in GPO" -Force
+ exit 1
}
-
- if ($InstallOK -gt 0) {
- Write-ToLog "$InstallOK apps updated ! No more update." 'Green'
+ $toSkip = $toSkip.Data
+ }
+ }
+
+ #Get outdated Winget packages
+ Write-ToLog 'Checking application updates on Winget Repository...' 'yellow'
+ $outdated = Get-WingetOutdatedApps
+
+ #If something unusual happened
+ if ($outdated -like 'An unusual*')
+ {
+ Write-ToLog "$outdated" 'cyan'
+ $outdated = $False
+ }
+
+ #Run only if $outdated is populated!
+ if ($outdated)
+ {
+ #Log list of app to update
+ foreach ($app in $outdated)
+ {
+ #List available updates
+ $Log = "-> Available update : $($app.Name). Current version : $($app.Version). Available version : $($app.AvailableVersion)."
+ $Log | Write-host
+ $Log | out-file -filepath $LogFile -Append
+ }
+
+ #Count good update installations
+ $Script:InstallOK = 0
+
+ #Trick under user context when -BypassListForUsers is used
+ if ($IsSystem -eq $false -and $WAUConfig.WAU_BypassListForUsers -eq 1)
+ {
+ Write-ToLog 'Bypass system list in user context is Enabled.'
+ $UseWhiteList = $false
+ $toSkip = $null
+ }
+
+ #If White List
+ if ($UseWhiteList)
+ {
+ #For each app, notify and update
+ foreach ($app in $outdated)
+ {
+ if (($toUpdate -contains $app.Id) -and $($app.Version) -ne 'Unknown')
+ {
+ Update-App $app
+ }
+ #if current app version is unknown
+ elseif ($($app.Version) -eq 'Unknown')
+ {
+ Write-ToLog "$($app.Name) : Skipped upgrade because current version is 'Unknown'" 'Gray'
+ }
+ #if app is in "excluded list"
+ else
+ {
+ Write-ToLog "$($app.Name) : Skipped upgrade because it is not in the included app list" 'Gray'
+ }
}
- }
-
- if ($InstallOK -eq 0 -or !$InstallOK) {
- Write-ToLog 'No new update.' 'Green'
- }
-
- #Check if any user is logged on if System and run User task (if installed)
- if ($IsSystem) {
- #User check routine from: https://stackoverflow.com/questions/23219718/powershell-script-to-see-currently-logged-in-users-domain-and-machine-status
- $explorerprocesses = @(Get-WmiObject -Query "Select * FROM Win32_Process WHERE Name='explorer.exe'" -ErrorAction SilentlyContinue)
- If ($explorerprocesses.Count -eq 0) {
- Write-ToLog 'No explorer process found / Nobody interactively logged on...'
+ }
+ #If Black List or default
+ else
+ {
+ #For each app, notify and update
+ foreach ($app in $outdated)
+ {
+ if (-not ($toSkip -contains $app.Id) -and $($app.Version) -ne 'Unknown')
+ {
+ Update-App $app
+ }
+ #if current app version is unknown
+ elseif ($($app.Version) -eq 'Unknown')
+ {
+ Write-ToLog "$($app.Name) : Skipped upgrade because current version is 'Unknown'" 'Gray'
+ }
+ #if app is in "excluded list"
+ else
+ {
+ Write-ToLog "$($app.Name) : Skipped upgrade because it is in the excluded app list" 'Gray'
+ }
}
- Else {
- #Run WAU in user context if the user task exist
- $UserScheduledTask = Get-ScheduledTask -TaskName 'Winget-AutoUpdate-UserContext' -ErrorAction SilentlyContinue
- if ($UserScheduledTask) {
-
- #Get Winget system apps to excape them befor running user context
- Write-ToLog 'User logged on, get a list of installed Winget apps in System context...'
- Get-WingetSystemApps
-
- #Run user context scheduled task
- Write-ToLog 'Starting WAU in User context'
- Start-ScheduledTask -TaskName $UserScheduledTask.TaskName -ErrorAction SilentlyContinue
- Exit 0
- }
- elseif (!$UserScheduledTask) {
- Write-ToLog 'User context execution not installed...'
- }
+ }
+
+ if ($InstallOK -gt 0)
+ {
+ Write-ToLog "$InstallOK apps updated ! No more update." 'Green'
+ }
+ }
+
+ if ($InstallOK -eq 0 -or !$InstallOK)
+ {
+ Write-ToLog 'No new update.' 'Green'
+ }
+
+ #Check if any user is logged on if System and run User task (if installed)
+ if ($IsSystem)
+ {
+ #User check routine from: https://stackoverflow.com/questions/23219718/powershell-script-to-see-currently-logged-in-users-domain-and-machine-status
+ $explorerprocesses = @(Get-WmiObject -Query "Select * FROM Win32_Process WHERE Name='explorer.exe'" -ErrorAction SilentlyContinue)
+ if ($explorerprocesses.Count -eq 0)
+ {
+ Write-ToLog 'No explorer process found / Nobody interactively logged on...'
+ }
+ else
+ {
+ #Run WAU in user context if the user task exist
+ $UserScheduledTask = Get-ScheduledTask -TaskName 'Winget-AutoUpdate-UserContext' -ErrorAction SilentlyContinue
+ if ($UserScheduledTask)
+ {
+
+ #Get Winget system apps to excape them befor running user context
+ Write-ToLog 'User logged on, get a list of installed Winget apps in System context...'
+ Get-WingetSystemApps
+
+ #Run user context scheduled task
+ Write-ToLog 'Starting WAU in User context'
+ Start-ScheduledTask -TaskName $UserScheduledTask.TaskName -ErrorAction SilentlyContinue
+ exit 0
}
- }
- }
- else {
- Write-ToLog 'Critical: Winget not installed or detected, exiting...' 'red'
- New-Item -Path "$WorkingDir\logs\error.txt" -Value 'Winget not installed or detected' -Force
- Write-ToLog 'End of process!' 'Cyan'
- Exit 1
- }
+ elseif (!$UserScheduledTask)
+ {
+ Write-ToLog 'User context execution not installed...'
+ }
+ }
+ }
+ }
+ else
+ {
+ Write-ToLog 'Critical: Winget not installed or detected, exiting...' 'red'
+ New-Item -Path "$WorkingDir\logs\error.txt" -Value 'Winget not installed or detected' -Force
+ Write-ToLog 'End of process!' 'Cyan'
+ exit 1
+ }
}
#End
diff --git a/Winget-AutoUpdate/functions/Add-ScopeMachine.ps1 b/Winget-AutoUpdate/functions/Add-ScopeMachine.ps1
index 5ff4832..631c7c2 100644
--- a/Winget-AutoUpdate/functions/Add-ScopeMachine.ps1
+++ b/Winget-AutoUpdate/functions/Add-ScopeMachine.ps1
@@ -1,38 +1,40 @@
# Function to configure the prefered scope option as Machine
-function Add-ScopeMachine
+function Add-ScopeMachine
{
[CmdletBinding()]
param
(
- [string]$SettingsPath
+ [string]
+ $SettingsPath
)
- if (Test-Path -Path $SettingsPath -ErrorAction SilentlyContinue)
+ if (Test-Path -Path $SettingsPath -ErrorAction SilentlyContinue)
{
$ConfigFile = (Get-Content -Path $SettingsPath -ErrorAction SilentlyContinue | Where-Object -FilterScript {
($_ -notmatch '//')
- } | ConvertFrom-Json)
+ } | ConvertFrom-Json)
}
-
- if (!$ConfigFile)
+
+ if (!$ConfigFile)
{
- $ConfigFile = @{}
+ $ConfigFile = @{
+ }
}
-
- if ($ConfigFile.installBehavior.preferences.scope)
+
+ if ($ConfigFile.installBehavior.preferences.scope)
{
$ConfigFile.installBehavior.preferences.scope = 'Machine'
}
- else
+ else
{
$Scope = (New-Object -TypeName PSObject -Property $(@{
scope = 'Machine'
- }))
+ }))
$Preference = (New-Object -TypeName PSObject -Property $(@{
preferences = $Scope
- }))
+ }))
$null = (Add-Member -InputObject $ConfigFile -MemberType NoteProperty -Name 'installBehavior' -Value $Preference -Force)
}
-
+
$null = ($ConfigFile | ConvertTo-Json | Out-File -FilePath $SettingsPath -Encoding utf8 -Force -Confirm:$false)
}
diff --git a/Winget-AutoUpdate/functions/Add-Shortcut.ps1 b/Winget-AutoUpdate/functions/Add-Shortcut.ps1
index e050281..75d70c7 100644
--- a/Winget-AutoUpdate/functions/Add-Shortcut.ps1
+++ b/Winget-AutoUpdate/functions/Add-Shortcut.ps1
@@ -1,16 +1,21 @@
# Function to create shortcuts
-function Add-Shortcut
-{
+function Add-Shortcut
+{
[CmdletBinding()]
param
(
- [string]$Target,
- [string]$Shortcut,
- [string]$Arguments,
- [string]$Icon,
- [string]$Description
+ [string]
+ $Target,
+ [string]
+ $Shortcut,
+ [string]
+ $Arguments,
+ [string]
+ $Icon,
+ [string]
+ $Description
)
-
+
$WScriptShell = (New-Object -ComObject WScript.Shell)
$Shortcut = $WScriptShell.CreateShortcut($Shortcut)
$Shortcut.TargetPath = $Target
diff --git a/Winget-AutoUpdate/functions/Confirm-Installation.ps1 b/Winget-AutoUpdate/functions/Confirm-Installation.ps1
index c676e26..7dba44b 100644
--- a/Winget-AutoUpdate/functions/Confirm-Installation.ps1
+++ b/Winget-AutoUpdate/functions/Confirm-Installation.ps1
@@ -1,33 +1,35 @@
-Function Confirm-Installation
+function Confirm-Installation
{
# Set json export file
[CmdletBinding()]
param
(
- [string]$AppName,
- [string]$AppVer
+ [string]
+ $AppName,
+ [string]
+ $AppVer
)
-
+
$JsonFile = ('{0}\Config\InstalledApps.json' -f $WorkingDir)
-
+
# Get installed apps and version in json file
$null = (& $Winget export -s winget -o $JsonFile --include-versions)
-
+
# Get json content
$Json = (Get-Content -Path $JsonFile -Raw | ConvertFrom-Json)
-
+
# Get apps and version in hashtable
$Packages = $Json.Sources.Packages
-
+
# Remove json file
$null = (Remove-Item -Path $JsonFile -Force -Confirm:$false -ErrorAction SilentlyContinue)
-
+
# Search for specific app and version
$Apps = $Packages | Where-Object -FilterScript {
($_.PackageIdentifier -eq $AppName -and $_.Version -like ('{0}*' -f $AppVer))
}
-
+
if ($Apps)
{
return $true
diff --git a/Winget-AutoUpdate/functions/Get-AZCopy.ps1 b/Winget-AutoUpdate/functions/Get-AZCopy.ps1
index b8da39a..1e52207 100644
--- a/Winget-AutoUpdate/functions/Get-AZCopy.ps1
+++ b/Winget-AutoUpdate/functions/Get-AZCopy.ps1
@@ -1,58 +1,59 @@
# Function to get AZCopy, if it doesn't exist and update it, if it does
-Function Get-AZCopy
+function Get-AZCopy
{
[CmdletBinding()]
param
(
- [string]$WingetUpdatePath
+ [string]
+ $WingetUpdatePath
)
-
+
$AZCopyLink = (Invoke-WebRequest -Uri https://aka.ms/downloadazcopy-v10-windows -UseBasicParsing -MaximumRedirection 0 -ErrorAction SilentlyContinue).headers.location
$AZCopyVersionRegex = [regex]::new('(\d+\.\d+\.\d+)')
$AZCopyLatestVersion = $AZCopyVersionRegex.Match($AZCopyLink).Value
-
- if ($null -eq $AZCopyLatestVersion -or '' -eq $AZCopyLatestVersion)
+
+ if ($null -eq $AZCopyLatestVersion -or '' -eq $AZCopyLatestVersion)
{
$AZCopyLatestVersion = '0.0.0'
}
-
- if (Test-Path -Path ('{0}\azcopy.exe' -f $WingetUpdatePath) -PathType Leaf -ErrorAction SilentlyContinue)
+
+ if (Test-Path -Path ('{0}\azcopy.exe' -f $WingetUpdatePath) -PathType Leaf -ErrorAction SilentlyContinue)
{
$AZCopyCurrentVersion = & "$WingetUpdatePath\azcopy.exe" -v
$AZCopyCurrentVersion = $AZCopyVersionRegex.Match($AZCopyCurrentVersion).Value
- Write-ToLog -LogMsg ('AZCopy version {0} found' -f $AZCopyCurrentVersion)
+ Write-ToLog -LogMsg ('AZCopy version {0} found' -f $AZCopyCurrentVersion)
}
- else
+ else
{
- Write-ToLog -LogMsg 'AZCopy not already installed'
+ Write-ToLog -LogMsg 'AZCopy not already installed'
$AZCopyCurrentVersion = '0.0.0'
}
-
- if (([version] $AZCopyCurrentVersion) -lt ([version] $AZCopyLatestVersion))
+
+ if (([version]$AZCopyCurrentVersion) -lt ([version]$AZCopyLatestVersion))
{
- Write-ToLog -LogMsg ('Installing version {0} of AZCopy' -f $AZCopyLatestVersion)
+ Write-ToLog -LogMsg ('Installing version {0} of AZCopy' -f $AZCopyLatestVersion)
$null = (Invoke-WebRequest -Uri $AZCopyLink -UseBasicParsing -OutFile ('{0}\azcopyv10.zip' -f $WingetUpdatePath))
- Write-ToLog -LogMsg 'Extracting AZCopy zip file'
+ Write-ToLog -LogMsg 'Extracting AZCopy zip file'
$null = (Expand-Archive -Path ('{0}\azcopyv10.zip' -f $WingetUpdatePath) -DestinationPath $WingetUpdatePath -Force -Confirm:$false)
$AZCopyPathSearch = (Resolve-Path -Path ('{0}\azcopy_*' -f $WingetUpdatePath))
-
- if ($AZCopyPathSearch -is [array])
+
+ if ($AZCopyPathSearch -is [array])
{
$AZCopyEXEPath = $AZCopyPathSearch[$AZCopyPathSearch.Length - 1]
}
- else
+ else
{
$AZCopyEXEPath = $AZCopyPathSearch
}
-
- Write-ToLog -LogMsg "Copying 'azcopy.exe' to main folder"
+
+ Write-ToLog -LogMsg "Copying 'azcopy.exe' to main folder"
$null = (Copy-Item -Path ('{0}\azcopy.exe' -f $AZCopyEXEPath) -Destination ('{0}\' -f $WingetUpdatePath) -Force -Confirm:$false)
- Write-ToLog -LogMsg 'Removing temporary AZCopy files'
+ Write-ToLog -LogMsg 'Removing temporary AZCopy files'
$null = (Remove-Item -Path $AZCopyEXEPath -Recurse -Force -Confirm:$false)
$null = (Remove-Item -Path ('{0}\azcopyv10.zip' -f $WingetUpdatePath) -Force -Confirm:$false)
$AZCopyCurrentVersion = & "$WingetUpdatePath\azcopy.exe" -v
$AZCopyCurrentVersion = $AZCopyVersionRegex.Match($AZCopyCurrentVersion).Value
- Write-ToLog -LogMsg ('AZCopy version {0} installed' -f $AZCopyCurrentVersion)
+ Write-ToLog -LogMsg ('AZCopy version {0} installed' -f $AZCopyCurrentVersion)
}
}
diff --git a/Winget-AutoUpdate/functions/Get-AppInfo.ps1 b/Winget-AutoUpdate/functions/Get-AppInfo.ps1
index e6b32fd..5038504 100644
--- a/Winget-AutoUpdate/functions/Get-AppInfo.ps1
+++ b/Winget-AutoUpdate/functions/Get-AppInfo.ps1
@@ -1,18 +1,19 @@
# Get the winget App Information
-Function Get-AppInfo
+function Get-AppInfo
{
# Get AppID Info
[CmdletBinding()]
param
(
- [string]$AppID
+ [string]
+ $AppID
)
-
+
$String = (& $winget show $AppID --accept-source-agreements -s winget | Out-String)
# Search for Release Note info
$ReleaseNote = [regex]::match($String, '(?<=Release Notes Url: )(.*)(?=\n)').Groups[0].Value
-
+
# Return Release Note
return $ReleaseNote
}
diff --git a/Winget-AutoUpdate/functions/Get-ExcludedApps.ps1 b/Winget-AutoUpdate/functions/Get-ExcludedApps.ps1
index 63f42b8..da1d326 100644
--- a/Winget-AutoUpdate/functions/Get-ExcludedApps.ps1
+++ b/Winget-AutoUpdate/functions/Get-ExcludedApps.ps1
@@ -1,16 +1,16 @@
#Function to get the Block List apps
-function Get-ExcludedApps
+function Get-ExcludedApps
{
- if ($GPOList)
+ if ($GPOList)
{
- if (Test-Path -Path 'HKLM:\SOFTWARE\Policies\Romanitho\Winget-AutoUpdate\BlackList' -ErrorAction SilentlyContinue)
+ if (Test-Path -Path 'HKLM:\SOFTWARE\Policies\Romanitho\Winget-AutoUpdate\BlackList' -ErrorAction SilentlyContinue)
{
$Key = 'HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Romanitho\Winget-AutoUpdate\BlackList\'
-
+
$ValueNames = (Get-Item -Path 'HKLM:\SOFTWARE\Policies\Romanitho\Winget-AutoUpdate\BlackList').Property
-
- foreach ($ValueName in $ValueNames)
+
+ foreach ($ValueName in $ValueNames)
{
$AppIDs = [Microsoft.Win32.Registry]::GetValue($Key, $ValueName, $false)
[PSCustomObject]@{
@@ -19,13 +19,13 @@ function Get-ExcludedApps
}
}
}
-
+
return $AppIDs
}
- elseif (Test-Path -Path ('{0}\excluded_apps.txt' -f $WorkingDir) -ErrorAction SilentlyContinue)
+ elseif (Test-Path -Path ('{0}\excluded_apps.txt' -f $WorkingDir) -ErrorAction SilentlyContinue)
{
return (Get-Content -Path ('{0}\excluded_apps.txt' -f $WorkingDir)).Trim() | Where-Object -FilterScript {
- $_.length -gt 0
+ $_.length -gt 0
}
}
}
diff --git a/Winget-AutoUpdate/functions/Get-IncludedApps.ps1 b/Winget-AutoUpdate/functions/Get-IncludedApps.ps1
index 09e9d79..b5d2c7f 100644
--- a/Winget-AutoUpdate/functions/Get-IncludedApps.ps1
+++ b/Winget-AutoUpdate/functions/Get-IncludedApps.ps1
@@ -1,15 +1,15 @@
# Function to get the allow List apps
-function Get-IncludedApps
+function Get-IncludedApps
{
- if ($GPOList)
+ if ($GPOList)
{
- if (Test-Path -Path 'HKLM:\SOFTWARE\Policies\Romanitho\Winget-AutoUpdate\WhiteList' -ErrorAction SilentlyContinue)
+ if (Test-Path -Path 'HKLM:\SOFTWARE\Policies\Romanitho\Winget-AutoUpdate\WhiteList' -ErrorAction SilentlyContinue)
{
$Key = 'HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Romanitho\Winget-AutoUpdate\WhiteList\'
$ValueNames = (Get-Item -Path 'HKLM:\SOFTWARE\Policies\Romanitho\Winget-AutoUpdate\WhiteList').Property
-
- foreach ($ValueName in $ValueNames)
+
+ foreach ($ValueName in $ValueNames)
{
$AppIDs = [Microsoft.Win32.Registry]::GetValue($Key, $ValueName, $false)
[PSCustomObject]@{
@@ -18,13 +18,13 @@ function Get-IncludedApps
}
}
}
-
+
return $AppIDs
}
- elseif (Test-Path -Path ('{0}\included_apps.txt' -f $WorkingDir) -ErrorAction SilentlyContinue)
+ elseif (Test-Path -Path ('{0}\included_apps.txt' -f $WorkingDir) -ErrorAction SilentlyContinue)
{
return (Get-Content -Path ('{0}\included_apps.txt' -f $WorkingDir)).Trim() | Where-Object -FilterScript {
- $_.length -gt 0
+ $_.length -gt 0
}
}
}
diff --git a/Winget-AutoUpdate/functions/Get-NotifLocale.ps1 b/Winget-AutoUpdate/functions/Get-NotifLocale.ps1
index 63254bd..4704a9e 100644
--- a/Winget-AutoUpdate/functions/Get-NotifLocale.ps1
+++ b/Winget-AutoUpdate/functions/Get-NotifLocale.ps1
@@ -1,28 +1,31 @@
#Function to get the locale file for notifications
-Function Get-NotifLocale {
-
- # Get OS locale
- $OSLocale = (Get-UICulture).Parent
-
- # Test if OS locale notif file exists
- $TestOSLocalPath = ('{0}\locale\{1}.xml' -f $WorkingDir, $OSLocale.Name)
-
- # Set OS Local if file exists
- if (Test-Path -Path $TestOSLocalPath -ErrorAction SilentlyContinue) {
- $LocaleDisplayName = $OSLocale.DisplayName
- $LocaleFile = $TestOSLocalPath
- }
- else {
- # Set English if file doesn't exist
- $LocaleDisplayName = 'English'
- $LocaleFile = ('{0}\locale\en.xml' -f $WorkingDir)
- }
-
- # Get locale XML file content
- [xml]$Script:NotifLocale = (Get-Content -Path $LocaleFile -Encoding UTF8 -ErrorAction SilentlyContinue)
-
- # Rerturn langague display name
- Return $LocaleDisplayName
-
+function Get-NotifLocale
+{
+
+ # Get OS locale
+ $OSLocale = (Get-UICulture).Parent
+
+ # Test if OS locale notif file exists
+ $TestOSLocalPath = ('{0}\locale\{1}.xml' -f $WorkingDir, $OSLocale.Name)
+
+ # Set OS Local if file exists
+ if (Test-Path -Path $TestOSLocalPath -ErrorAction SilentlyContinue)
+ {
+ $LocaleDisplayName = $OSLocale.DisplayName
+ $LocaleFile = $TestOSLocalPath
+ }
+ else
+ {
+ # Set English if file doesn't exist
+ $LocaleDisplayName = 'English'
+ $LocaleFile = ('{0}\locale\en.xml' -f $WorkingDir)
+ }
+
+ # Get locale XML file content
+ [xml]$Script:NotifLocale = (Get-Content -Path $LocaleFile -Encoding UTF8 -ErrorAction SilentlyContinue)
+
+ # Rerturn langague display name
+ return $LocaleDisplayName
+
}
diff --git a/Winget-AutoUpdate/functions/Get-Policies.ps1 b/Winget-AutoUpdate/functions/Get-Policies.ps1
index ab71cd1..98eb539 100644
--- a/Winget-AutoUpdate/functions/Get-Policies.ps1
+++ b/Winget-AutoUpdate/functions/Get-Policies.ps1
@@ -1,116 +1,116 @@
# Function to get the Domain/Local Policies (GPO)
-Function Get-Policies
+function Get-Policies
{
# Get WAU Policies and set the Configurations Registry Accordingly
$WAUPolicies = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Romanitho\Winget-AutoUpdate' -ErrorAction SilentlyContinue)
-
- if ($WAUPolicies)
+
+ if ($WAUPolicies)
{
- if ($($WAUPolicies.WAU_ActivateGPOManagement -eq 1))
+ if ($($WAUPolicies.WAU_ActivateGPOManagement -eq 1))
{
$ChangedSettings = 0
$regPath = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate'
-
- if ($null -ne $($WAUPolicies.WAU_BypassListForUsers) -and ($($WAUPolicies.WAU_BypassListForUsers) -ne $($WAUConfig.WAU_BypassListForUsers)))
+
+ if ($null -ne $($WAUPolicies.WAU_BypassListForUsers) -and ($($WAUPolicies.WAU_BypassListForUsers) -ne $($WAUConfig.WAU_BypassListForUsers)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_BypassListForUsers -Value $($WAUPolicies.WAU_BypassListForUsers) -PropertyType DWord -Force -Confirm:$false)
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_BypassListForUsers) -and ($($WAUConfig.WAU_BypassListForUsers) -or $($WAUConfig.WAU_BypassListForUsers) -eq 0))
+ elseif ($null -eq $($WAUPolicies.WAU_BypassListForUsers) -and ($($WAUConfig.WAU_BypassListForUsers) -or $($WAUConfig.WAU_BypassListForUsers) -eq 0))
{
$null = (Remove-ItemProperty -Path $regPath -Name WAU_BypassListForUsers -Force -ErrorAction SilentlyContinue -Confirm:$false)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_DisableAutoUpdate) -and ($($WAUPolicies.WAU_DisableAutoUpdate) -ne $($WAUConfig.WAU_DisableAutoUpdate)))
+
+ if ($null -ne $($WAUPolicies.WAU_DisableAutoUpdate) -and ($($WAUPolicies.WAU_DisableAutoUpdate) -ne $($WAUConfig.WAU_DisableAutoUpdate)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_DisableAutoUpdate -Value $($WAUPolicies.WAU_DisableAutoUpdate) -PropertyType DWord -Force -Confirm:$false)
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_DisableAutoUpdate) -and ($($WAUConfig.WAU_DisableAutoUpdate) -or $($WAUConfig.WAU_DisableAutoUpdate) -eq 0))
+ elseif ($null -eq $($WAUPolicies.WAU_DisableAutoUpdate) -and ($($WAUConfig.WAU_DisableAutoUpdate) -or $($WAUConfig.WAU_DisableAutoUpdate) -eq 0))
{
$null = (Remove-ItemProperty -Path $regPath -Name WAU_DisableAutoUpdate -Force -ErrorAction SilentlyContinue -Confirm:$false)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_DoNotRunOnMetered) -and ($($WAUPolicies.WAU_DoNotRunOnMetered) -ne $($WAUConfig.WAU_DoNotRunOnMetered)))
+
+ if ($null -ne $($WAUPolicies.WAU_DoNotRunOnMetered) -and ($($WAUPolicies.WAU_DoNotRunOnMetered) -ne $($WAUConfig.WAU_DoNotRunOnMetered)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_DoNotRunOnMetered -Value $($WAUPolicies.WAU_DoNotRunOnMetered) -PropertyType DWord -Force -Confirm:$false)
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_DoNotRunOnMetered) -and !$($WAUConfig.WAU_DoNotRunOnMetered))
+ elseif ($null -eq $($WAUPolicies.WAU_DoNotRunOnMetered) -and !$($WAUConfig.WAU_DoNotRunOnMetered))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_DoNotRunOnMetered -Value 1 -PropertyType DWord -Force -Confirm:$false)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_UpdatePrerelease) -and ($($WAUPolicies.WAU_UpdatePrerelease) -ne $($WAUConfig.WAU_UpdatePrerelease)))
+
+ if ($null -ne $($WAUPolicies.WAU_UpdatePrerelease) -and ($($WAUPolicies.WAU_UpdatePrerelease) -ne $($WAUConfig.WAU_UpdatePrerelease)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UpdatePrerelease -Value $($WAUPolicies.WAU_UpdatePrerelease) -PropertyType DWord -Force -Confirm:$false)
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_UpdatePrerelease) -and $($WAUConfig.WAU_UpdatePrerelease))
+ elseif ($null -eq $($WAUPolicies.WAU_UpdatePrerelease) -and $($WAUConfig.WAU_UpdatePrerelease))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UpdatePrerelease -Value 0 -PropertyType DWord -Force -Confirm:$false)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_UseWhiteList) -and ($($WAUPolicies.WAU_UseWhiteList) -ne $($WAUConfig.WAU_UseWhiteList)))
+
+ if ($null -ne $($WAUPolicies.WAU_UseWhiteList) -and ($($WAUPolicies.WAU_UseWhiteList) -ne $($WAUConfig.WAU_UseWhiteList)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UseWhiteList -Value $($WAUPolicies.WAU_UseWhiteList) -PropertyType DWord -Force -Confirm:$false)
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_UseWhiteList) -and ($($WAUConfig.WAU_UseWhiteList) -or $($WAUConfig.WAU_UseWhiteList) -eq 0))
+ elseif ($null -eq $($WAUPolicies.WAU_UseWhiteList) -and ($($WAUConfig.WAU_UseWhiteList) -or $($WAUConfig.WAU_UseWhiteList) -eq 0))
{
$null = (Remove-ItemProperty -Path $regPath -Name WAU_UseWhiteList -Force -ErrorAction SilentlyContinue -Confirm:$false)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_ListPath) -and ($($WAUPolicies.WAU_ListPath) -ne $($WAUConfig.WAU_ListPath)))
+
+ if ($null -ne $($WAUPolicies.WAU_ListPath) -and ($($WAUPolicies.WAU_ListPath) -ne $($WAUConfig.WAU_ListPath)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_ListPath -Value $($WAUPolicies.WAU_ListPath.TrimEnd(' ', '\', '/')) -Force -Confirm:$false)
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_ListPath) -and $($WAUConfig.WAU_ListPath))
+ elseif ($null -eq $($WAUPolicies.WAU_ListPath) -and $($WAUConfig.WAU_ListPath))
{
$null = (Remove-ItemProperty -Path $regPath -Name WAU_ListPath -Force -ErrorAction SilentlyContinue -Confirm:$false)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_ModsPath) -and ($($WAUPolicies.WAU_ModsPath) -ne $($WAUConfig.WAU_ModsPath)))
+
+ if ($null -ne $($WAUPolicies.WAU_ModsPath) -and ($($WAUPolicies.WAU_ModsPath) -ne $($WAUConfig.WAU_ModsPath)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_ModsPath -Value $($WAUPolicies.WAU_ModsPath.TrimEnd(' ', '\', '/')) -Force -Confirm:$false)
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_ModsPath) -and $($WAUConfig.WAU_ModsPath))
+ elseif ($null -eq $($WAUPolicies.WAU_ModsPath) -and $($WAUConfig.WAU_ModsPath))
{
$null = (Remove-ItemProperty -Path $regPath -Name WAU_ModsPath -Force -ErrorAction SilentlyContinue -Confirm:$false)
$ChangedSettings++
}
- if ($null -ne $($WAUPolicies.WAU_AzureBlobSASURL) -and ($($WAUPolicies.WAU_AzureBlobSASURL) -ne $($WAUConfig.WAU_AzureBlobSASURL)))
+ if ($null -ne $($WAUPolicies.WAU_AzureBlobSASURL) -and ($($WAUPolicies.WAU_AzureBlobSASURL) -ne $($WAUConfig.WAU_AzureBlobSASURL)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_AzureBlobSASURL -Value $($WAUPolicies.WAU_AzureBlobSASURL.TrimEnd(' ', '\', '/')) -Force -Confirm:$false)
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_AzureBlobSASURL) -and $($WAUConfig.WAU_AzureBlobSASURL))
+ elseif ($null -eq $($WAUPolicies.WAU_AzureBlobSASURL) -and $($WAUConfig.WAU_AzureBlobSASURL))
{
$null = (Remove-ItemProperty -Path $regPath -Name WAU_AzureBlobSASURL -Force -ErrorAction SilentlyContinue -Confirm:$false)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_NotificationLevel) -and ($($WAUPolicies.WAU_NotificationLevel) -ne $($WAUConfig.WAU_NotificationLevel)))
+
+ if ($null -ne $($WAUPolicies.WAU_NotificationLevel) -and ($($WAUPolicies.WAU_NotificationLevel) -ne $($WAUConfig.WAU_NotificationLevel)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_NotificationLevel -Value $($WAUPolicies.WAU_NotificationLevel) -Force -Confirm:$false)
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_NotificationLevel) -and $($WAUConfig.WAU_NotificationLevel) -ne 'Full')
+ elseif ($null -eq $($WAUPolicies.WAU_NotificationLevel) -and $($WAUConfig.WAU_NotificationLevel) -ne 'Full')
{
$null = (New-ItemProperty -Path $regPath -Name WAU_NotificationLevel -Value 'Full' -Force -Confirm:$false)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_UpdatesAtTime) -and ($($WAUPolicies.WAU_UpdatesAtTime) -ne $($WAUConfig.WAU_UpdatesAtTime)))
+
+ if ($null -ne $($WAUPolicies.WAU_UpdatesAtTime) -and ($($WAUPolicies.WAU_UpdatesAtTime) -ne $($WAUConfig.WAU_UpdatesAtTime)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UpdatesAtTime -Value $($WAUPolicies.WAU_UpdatesAtTime) -Force -Confirm:$false)
$Script:WAUConfig = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate')
@@ -119,10 +119,10 @@ Function Get-Policies
$folder = $service.GetFolder('\')
$task = $folder.GetTask('Winget-AutoUpdate')
$definition = $task.Definition
-
- for ($triggerId = 1; $triggerId -le $definition.Triggers.Count; $triggerId++)
+
+ for ($triggerId = 1; $triggerId -le $definition.Triggers.Count; $triggerId++)
{
- if (($definition.Triggers.Item($triggerId).Type -eq '2') -or ($definition.Triggers.Item($triggerId).Type -eq '3'))
+ if (($definition.Triggers.Item($triggerId).Type -eq '2') -or ($definition.Triggers.Item($triggerId).Type -eq '3'))
{
$PreStartBoundary = ($definition.Triggers.Item($triggerId).StartBoundary).Substring(0, 11)
$PostStartBoundary = ($definition.Triggers.Item($triggerId).StartBoundary).Substring(19, 6)
@@ -134,7 +134,7 @@ Function Get-Policies
$null = $folder.RegisterTaskDefinition($task.Name, $definition, 4, $null, $null, $null)
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_UpdatesAtTime) -and $($WAUConfig.WAU_UpdatesAtTime) -ne '06:00:00')
+ elseif ($null -eq $($WAUPolicies.WAU_UpdatesAtTime) -and $($WAUConfig.WAU_UpdatesAtTime) -ne '06:00:00')
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UpdatesAtTime -Value '06:00:00' -Force -Confirm:$false)
$Script:WAUConfig = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate'
@@ -143,10 +143,10 @@ Function Get-Policies
$folder = $service.GetFolder('\')
$task = $folder.GetTask('Winget-AutoUpdate')
$definition = $task.Definition
-
- for ($triggerId = 1; $triggerId -le $definition.Triggers.Count; $triggerId++)
+
+ for ($triggerId = 1; $triggerId -le $definition.Triggers.Count; $triggerId++)
{
- if (($definition.Triggers.Item($triggerId).Type -eq '2') -or ($definition.Triggers.Item($triggerId).Type -eq '3'))
+ if (($definition.Triggers.Item($triggerId).Type -eq '2') -or ($definition.Triggers.Item($triggerId).Type -eq '3'))
{
$PreStartBoundary = ($definition.Triggers.Item($triggerId).StartBoundary).Substring(0, 11)
$PostStartBoundary = ($definition.Triggers.Item($triggerId).StartBoundary).Substring(19, 6)
@@ -155,12 +155,12 @@ Function Get-Policies
break
}
}
-
+
$null = $folder.RegisterTaskDefinition($task.Name, $definition, 4, $null, $null, $null)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_UpdatesInterval) -and ($($WAUPolicies.WAU_UpdatesInterval) -ne $($WAUConfig.WAU_UpdatesInterval)))
+
+ if ($null -ne $($WAUPolicies.WAU_UpdatesInterval) -and ($($WAUPolicies.WAU_UpdatesInterval) -ne $($WAUConfig.WAU_UpdatesInterval)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UpdatesInterval -Value $($WAUPolicies.WAU_UpdatesInterval) -Force -Confirm:$false)
$service = (New-Object -ComObject Schedule.Service)
@@ -168,26 +168,26 @@ Function Get-Policies
$folder = $service.GetFolder('\')
$task = $folder.GetTask('Winget-AutoUpdate')
$definition = $task.Definition
-
- for ($triggerId = 1; $triggerId -le $definition.Triggers.Count; $triggerId++)
+
+ for ($triggerId = 1; $triggerId -le $definition.Triggers.Count; $triggerId++)
{
- if (($definition.Triggers.Item($triggerId).Type -eq '2') -or ($definition.Triggers.Item($triggerId).Type -eq '3'))
+ if (($definition.Triggers.Item($triggerId).Type -eq '2') -or ($definition.Triggers.Item($triggerId).Type -eq '3'))
{
$UpdatesAtTime = ($definition.Triggers.Item($triggerId).StartBoundary).Substring(11, 8)
$definition.Triggers.Remove($triggerId)
$triggerId -= 1
}
}
-
+
$null = $folder.RegisterTaskDefinition($task.Name, $definition, 4, $null, $null, $null)
-
- if (!$($WAUConfig.WAU_UpdatesAtTime))
+
+ if (!$($WAUConfig.WAU_UpdatesAtTime))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UpdatesAtTime -Value $UpdatesAtTime -Force -Confirm:$false)
$Script:WAUConfig = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate')
}
-
- if ($($WAUPolicies.WAU_UpdatesInterval) -ne 'Never')
+
+ if ($($WAUPolicies.WAU_UpdatesInterval) -ne 'Never')
{
#Count Triggers (correctly)
$service = (New-Object -ComObject Schedule.Service)
@@ -196,48 +196,49 @@ Function Get-Policies
$task = $folder.GetTask('Winget-AutoUpdate')
$definition = $task.Definition
$null = $definition.Triggers.Count
- switch ($($WAUPolicies.WAU_UpdatesInterval)) {
- 'Daily'
+ switch ($($WAUPolicies.WAU_UpdatesInterval))
+ {
+ 'Daily'
{
$tasktrigger = New-ScheduledTaskTrigger -Daily -At $($WAUConfig.WAU_UpdatesAtTime)
break
}
- 'BiDaily'
+ 'BiDaily'
{
$tasktrigger = New-ScheduledTaskTrigger -Daily -At $($WAUConfig.WAU_UpdatesAtTime) -DaysInterval 2
break
}
- 'Weekly'
+ 'Weekly'
{
$tasktrigger = New-ScheduledTaskTrigger -Weekly -At $($WAUConfig.WAU_UpdatesAtTime) -DaysOfWeek 2
break
}
- 'BiWeekly'
+ 'BiWeekly'
{
$tasktrigger = New-ScheduledTaskTrigger -Weekly -At $($WAUConfig.WAU_UpdatesAtTime) -DaysOfWeek 2 -WeeksInterval 2
break
}
- 'Monthly'
+ 'Monthly'
{
$tasktrigger = New-ScheduledTaskTrigger -Weekly -At $($WAUConfig.WAU_UpdatesAtTime) -DaysOfWeek 2 -WeeksInterval 4
break
}
}
- if ($definition.Triggers.Count -gt 0)
+ if ($definition.Triggers.Count -gt 0)
{
$triggers = @()
$triggers += (Get-ScheduledTask -TaskName 'Winget-AutoUpdate').Triggers
$triggers += $tasktrigger
$null = (Set-ScheduledTask -TaskName 'Winget-AutoUpdate' -Trigger $triggers)
}
- else
+ else
{
$null = (Set-ScheduledTask -TaskName 'Winget-AutoUpdate' -Trigger $tasktrigger)
}
}
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_UpdatesInterval) -and $($WAUConfig.WAU_UpdatesInterval) -ne 'Daily')
+ elseif ($null -eq $($WAUPolicies.WAU_UpdatesInterval) -and $($WAUConfig.WAU_UpdatesInterval) -ne 'Daily')
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UpdatesInterval -Value 'Daily' -Force -Confirm:$false)
$service = (New-Object -ComObject Schedule.Service)
@@ -245,27 +246,27 @@ Function Get-Policies
$folder = $service.GetFolder('\')
$task = $folder.GetTask('Winget-AutoUpdate')
$definition = $task.Definition
-
- for ($triggerId = 1; $triggerId -le $definition.Triggers.Count; $triggerId++)
+
+ for ($triggerId = 1; $triggerId -le $definition.Triggers.Count; $triggerId++)
{
- if (($definition.Triggers.Item($triggerId).Type -eq '2') -or ($definition.Triggers.Item($triggerId).Type -eq '3'))
+ if (($definition.Triggers.Item($triggerId).Type -eq '2') -or ($definition.Triggers.Item($triggerId).Type -eq '3'))
{
$UpdatesAtTime = ($definition.Triggers.Item($triggerId).StartBoundary).Substring(11, 8)
$definition.Triggers.Remove($triggerId)
$triggerId -= 1
}
}
-
+
$null = $folder.RegisterTaskDefinition($task.Name, $definition, 4, $null, $null, $null)
-
- if (!$($WAUConfig.WAU_UpdatesAtTime))
+
+ if (!$($WAUConfig.WAU_UpdatesAtTime))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UpdatesAtTime -Value $UpdatesAtTime -Force -Confirm:$false)
$Script:WAUConfig = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate')
}
-
+
$tasktrigger = (New-ScheduledTaskTrigger -Daily -At $($WAUConfig.WAU_UpdatesAtTime))
-
+
# Count Triggers (correctly)
$service = (New-Object -ComObject Schedule.Service)
$service.Connect($env:COMPUTERNAME)
@@ -273,24 +274,24 @@ Function Get-Policies
$task = $folder.GetTask('Winget-AutoUpdate')
$definition = $task.Definition
$null = $definition.Triggers.Count
-
- if ($definition.Triggers.Count -gt 0)
+
+ if ($definition.Triggers.Count -gt 0)
{
$triggers = @()
$triggers += (Get-ScheduledTask -TaskName 'Winget-AutoUpdate').Triggers
$triggers += $tasktrigger
$null = (Set-ScheduledTask -TaskName 'Winget-AutoUpdate' -Trigger $triggers)
}
- else
+ else
{
$null = (Set-ScheduledTask -TaskName 'Winget-AutoUpdate' -Trigger $tasktrigger)
}
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_UpdatesAtLogon) -and ($($WAUPolicies.WAU_UpdatesAtLogon) -ne $($WAUConfig.WAU_UpdatesAtLogon)))
+
+ if ($null -ne $($WAUPolicies.WAU_UpdatesAtLogon) -and ($($WAUPolicies.WAU_UpdatesAtLogon) -ne $($WAUConfig.WAU_UpdatesAtLogon)))
{
- if ($WAUPolicies.WAU_UpdatesAtLogon -eq 1)
+ if ($WAUPolicies.WAU_UpdatesAtLogon -eq 1)
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UpdatesAtLogon -Value $($WAUPolicies.WAU_UpdatesAtLogon) -PropertyType DWord -Force -Confirm:$false)
$triggers = @()
@@ -302,22 +303,22 @@ Function Get-Policies
$task = $folder.GetTask('Winget-AutoUpdate')
$definition = $task.Definition
$triggerLogon = $false
-
- foreach ($trigger in $definition.Triggers)
+
+ foreach ($trigger in $definition.Triggers)
{
- if ($trigger.Type -eq '9')
+ if ($trigger.Type -eq '9')
{
$triggerLogon = $true
break
}
}
- if (!$triggerLogon)
+ if (!$triggerLogon)
{
$triggers += New-ScheduledTaskTrigger -AtLogOn
$null = (Set-ScheduledTask -TaskName 'Winget-AutoUpdate' -Trigger $triggers)
}
}
- else
+ else
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UpdatesAtLogon -Value $($WAUPolicies.WAU_UpdatesAtLogon) -PropertyType DWord -Force -Confirm:$false)
$service = (New-Object -ComObject Schedule.Service)
@@ -326,22 +327,22 @@ Function Get-Policies
$task = $folder.GetTask('Winget-AutoUpdate')
$definition = $task.Definition
$null = $definition.Triggers.Count
-
- for ($triggerId = 1; $triggerId -le $definition.Triggers.Count; $triggerId++)
+
+ for ($triggerId = 1; $triggerId -le $definition.Triggers.Count; $triggerId++)
{
- if ($definition.Triggers.Item($triggerId).Type -eq '9')
+ if ($definition.Triggers.Item($triggerId).Type -eq '9')
{
$definition.Triggers.Remove($triggerId)
$triggerId -= 1
}
}
-
+
$null = $folder.RegisterTaskDefinition($task.Name, $definition, 4, $null, $null, $null)
}
-
+
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_UpdatesAtLogon) -and ($($WAUConfig.WAU_UpdatesAtLogon) -or $($WAUConfig.WAU_UpdatesAtLogon) -eq 0))
+ elseif ($null -eq $($WAUPolicies.WAU_UpdatesAtLogon) -and ($($WAUConfig.WAU_UpdatesAtLogon) -or $($WAUConfig.WAU_UpdatesAtLogon) -eq 0))
{
$null = (Remove-ItemProperty -Path $regPath -Name WAU_UpdatesAtLogon -Force -ErrorAction SilentlyContinue -Confirm:$false)
$service = (New-Object -ComObject Schedule.Service)
@@ -349,25 +350,25 @@ Function Get-Policies
$folder = $service.GetFolder('\')
$task = $folder.GetTask('Winget-AutoUpdate')
$definition = $task.Definition
-
- for ($triggerId = 1; $triggerId -le $definition.Triggers.Count; $triggerId++)
+
+ for ($triggerId = 1; $triggerId -le $definition.Triggers.Count; $triggerId++)
{
- if ($definition.Triggers.Item($triggerId).Type -eq '9')
+ if ($definition.Triggers.Item($triggerId).Type -eq '9')
{
$definition.Triggers.Remove($triggerId)
$triggerId -= 1
}
}
-
+
$null = $folder.RegisterTaskDefinition($task.Name, $definition, 4, $null, $null, $null)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_UserContext) -and ($($WAUPolicies.WAU_UserContext) -ne $($WAUConfig.WAU_UserContext)))
+
+ if ($null -ne $($WAUPolicies.WAU_UserContext) -and ($($WAUPolicies.WAU_UserContext) -ne $($WAUConfig.WAU_UserContext)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UserContext -Value $($WAUPolicies.WAU_UserContext) -PropertyType DWord -Force -Confirm:$false)
-
- if ($WAUPolicies.WAU_UserContext -eq 1)
+
+ if ($WAUPolicies.WAU_UserContext -eq 1)
{
# Settings for the scheduled task in User context
$taskAction = New-ScheduledTaskAction -Execute 'wscript.exe' -Argument "`"$($WAUConfig.InstallLocation)\Invisible.vbs`" `"powershell.exe -NoProfile -ExecutionPolicy Bypass -File `"`"`"$($WAUConfig.InstallLocation)\winget-upgrade.ps1`"`""
@@ -377,94 +378,94 @@ Function Get-Policies
$task = (New-ScheduledTask -Action $taskAction -Principal $taskUserPrincipal -Settings $taskSettings)
$null = (Register-ScheduledTask -TaskName 'Winget-AutoUpdate-UserContext' -InputObject $task -Force)
}
- else
+ else
{
$null = (Get-ScheduledTask -TaskName 'Winget-AutoUpdate-UserContext' -ErrorAction SilentlyContinue | Unregister-ScheduledTask -Confirm:$false -ErrorAction SilentlyContinue)
}
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_UserContext) -and ($($WAUConfig.WAU_UserContext) -or $($WAUConfig.WAU_UserContext) -eq 0))
+ elseif ($null -eq $($WAUPolicies.WAU_UserContext) -and ($($WAUConfig.WAU_UserContext) -or $($WAUConfig.WAU_UserContext) -eq 0))
{
$null = (Remove-ItemProperty -Path $regPath -Name WAU_UserContext -Force -ErrorAction SilentlyContinue -Confirm:$false)
$null = (Get-ScheduledTask -TaskName 'Winget-AutoUpdate-UserContext' -ErrorAction SilentlyContinue | Unregister-ScheduledTask -Confirm:$false -ErrorAction SilentlyContinue)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_DesktopShortcut) -and ($($WAUPolicies.WAU_DesktopShortcut) -ne $($WAUConfig.WAU_DesktopShortcut)))
+
+ if ($null -ne $($WAUPolicies.WAU_DesktopShortcut) -and ($($WAUPolicies.WAU_DesktopShortcut) -ne $($WAUConfig.WAU_DesktopShortcut)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_DesktopShortcut -Value $($WAUPolicies.WAU_DesktopShortcut) -PropertyType DWord -Force -Confirm:$false)
-
- if ($WAUPolicies.WAU_DesktopShortcut -eq 1)
+
+ if ($WAUPolicies.WAU_DesktopShortcut -eq 1)
{
Add-Shortcut 'wscript.exe' "${env:Public}\Desktop\WAU - Check for updated Apps.lnk" "`"$($WAUConfig.InstallLocation)\Invisible.vbs`" `"powershell.exe -NoProfile -ExecutionPolicy Bypass -File `"`"`"$($WAUConfig.InstallLocation)\user-run.ps1`"`"" "${env:SystemRoot}\System32\shell32.dll,-16739" 'Manual start of Winget-AutoUpdate (WAU)...'
}
- else
+ else
{
$null = (Remove-Item -Path "${env:Public}\Desktop\WAU - Check for updated Apps.lnk" -Force -Confirm:$false)
}
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_DesktopShortcut) -and ($($WAUConfig.WAU_DesktopShortcut) -or $($WAUConfig.WAU_DesktopShortcut) -eq 0))
+ elseif ($null -eq $($WAUPolicies.WAU_DesktopShortcut) -and ($($WAUConfig.WAU_DesktopShortcut) -or $($WAUConfig.WAU_DesktopShortcut) -eq 0))
{
$null = (Remove-ItemProperty -Path $regPath -Name WAU_DesktopShortcut -Force -Confirm:$false -ErrorAction SilentlyContinue)
$null = (Remove-Item -Path "${env:Public}\Desktop\WAU - Check for updated Apps.lnk" -Force -Confirm:$false)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_StartMenuShortcut) -and ($($WAUPolicies.WAU_StartMenuShortcut) -ne $($WAUConfig.WAU_StartMenuShortcut)))
+
+ if ($null -ne $($WAUPolicies.WAU_StartMenuShortcut) -and ($($WAUPolicies.WAU_StartMenuShortcut) -ne $($WAUConfig.WAU_StartMenuShortcut)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_StartMenuShortcut -Value $($WAUPolicies.WAU_StartMenuShortcut) -PropertyType DWord -Force -Confirm:$false)
-
- if ($WAUPolicies.WAU_StartMenuShortcut -eq 1)
+
+ if ($WAUPolicies.WAU_StartMenuShortcut -eq 1)
{
- if (!(Test-Path -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)"))
+ if (!(Test-Path -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)"))
{
$null = (New-Item -ItemType Directory -Force -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)" -Confirm:$false)
}
-
+
Add-Shortcut 'wscript.exe' "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)\WAU - Check for updated Apps.lnk" "`"$($WAUConfig.InstallLocation)\Invisible.vbs`" `"powershell.exe -NoProfile -ExecutionPolicy Bypass -File `"`"`"$($WAUConfig.InstallLocation)\user-run.ps1`"`"" "${env:SystemRoot}\System32\shell32.dll,-16739" 'Manual start of Winget-AutoUpdate (WAU)...'
Add-Shortcut 'wscript.exe' "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)\WAU - Open logs.lnk" "`"$($WAUConfig.InstallLocation)\Invisible.vbs`" `"powershell.exe -NoProfile -ExecutionPolicy Bypass -File `"`"`"$($WAUConfig.InstallLocation)\user-run.ps1`" -Logs`"" "${env:SystemRoot}\System32\shell32.dll,-16763" 'Open existing WAU logs...'
Add-Shortcut 'wscript.exe' "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)\WAU - Web Help.lnk" "`"$($WAUConfig.InstallLocation)\Invisible.vbs`" `"powershell.exe -NoProfile -ExecutionPolicy Bypass -File `"`"`"$($WAUConfig.InstallLocation)\user-run.ps1`" -Help`"" "${env:SystemRoot}\System32\shell32.dll,-24" 'Help for WAU...'
}
- else
+ else
{
$null = (Remove-Item -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)" -Recurse -Force -Confirm:$false)
}
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_StartMenuShortcut) -and ($($WAUConfig.WAU_StartMenuShortcut) -or $($WAUConfig.WAU_StartMenuShortcut) -eq 0))
+ elseif ($null -eq $($WAUPolicies.WAU_StartMenuShortcut) -and ($($WAUConfig.WAU_StartMenuShortcut) -or $($WAUConfig.WAU_StartMenuShortcut) -eq 0))
{
$null = (Remove-ItemProperty -Path $regPath -Name WAU_StartMenuShortcut -Force -ErrorAction SilentlyContinue -Confirm:$false)
$null = (Remove-Item -Path "${env:ProgramData}\Microsoft\Windows\Start Menu\Programs\Winget-AutoUpdate (WAU)" -Recurse -Force -Confirm:$false)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_MaxLogFiles) -and ($($WAUPolicies.WAU_MaxLogFiles) -ne $($WAUConfig.WAU_MaxLogFiles)))
+
+ if ($null -ne $($WAUPolicies.WAU_MaxLogFiles) -and ($($WAUPolicies.WAU_MaxLogFiles) -ne $($WAUConfig.WAU_MaxLogFiles)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_MaxLogFiles -Value $($WAUPolicies.WAU_MaxLogFiles.TrimEnd(' ', '\', '/')) -Force -Confirm:$false)
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_MaxLogFiles) -and $($WAUConfig.WAU_MaxLogFiles) -ne 3)
+ elseif ($null -eq $($WAUPolicies.WAU_MaxLogFiles) -and $($WAUConfig.WAU_MaxLogFiles) -ne 3)
{
$null = (New-ItemProperty -Path $regPath -Name WAU_MaxLogFiles -Value 3 -Force -Confirm:$false)
$ChangedSettings++
}
-
- if ($null -ne $($WAUPolicies.WAU_MaxLogSize) -and ($($WAUPolicies.WAU_MaxLogSize) -ne $($WAUConfig.WAU_MaxLogSize)))
+
+ if ($null -ne $($WAUPolicies.WAU_MaxLogSize) -and ($($WAUPolicies.WAU_MaxLogSize) -ne $($WAUConfig.WAU_MaxLogSize)))
{
$null = (New-ItemProperty -Path $regPath -Name WAU_MaxLogSize -Value $($WAUPolicies.WAU_MaxLogSize.TrimEnd(' ', '\', '/')) -Force -Confirm:$false)
$ChangedSettings++
}
- elseif ($null -eq $($WAUPolicies.WAU_MaxLogSize) -and $($WAUConfig.WAU_MaxLogSize) -ne 1048576)
+ elseif ($null -eq $($WAUPolicies.WAU_MaxLogSize) -and $($WAUConfig.WAU_MaxLogSize) -ne 1048576)
{
$null = (New-ItemProperty -Path $regPath -Name WAU_MaxLogSize -Value 1048576 -Force -Confirm:$false)
$ChangedSettings++
}
-
+
# Get WAU Configurations after Policies change
$Script:WAUConfig = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate')
}
}
-
- Return $($WAUPolicies.WAU_ActivateGPOManagement), $ChangedSettings
+
+ return $($WAUPolicies.WAU_ActivateGPOManagement), $ChangedSettings
}
diff --git a/Winget-AutoUpdate/functions/Get-WAUAvailableVersion.ps1 b/Winget-AutoUpdate/functions/Get-WAUAvailableVersion.ps1
index 5bb5091..99e40d4 100644
--- a/Winget-AutoUpdate/functions/Get-WAUAvailableVersion.ps1
+++ b/Winget-AutoUpdate/functions/Get-WAUAvailableVersion.ps1
@@ -1,22 +1,22 @@
# Function to get the latest WAU available version on Github
-function Get-WAUAvailableVersion
+function Get-WAUAvailableVersion
{
# Get Github latest version
- if ($WAUConfig.WAU_UpdatePrerelease -eq 1)
+ if ($WAUConfig.WAU_UpdatePrerelease -eq 1)
{
# Log
Write-ToLog -LogMsg 'WAU AutoUpdate Pre-release versions is Enabled' -LogColor 'Cyan'
-
+
# Get latest pre-release info
$WAUurl = 'https://api.github.com/repos/Romanitho/Winget-AutoUpdate/releases'
}
- else
+ else
{
# Get latest stable info
$WAUurl = 'https://api.github.com/repos/Romanitho/Winget-AutoUpdate/releases/latest'
}
-
+
# Return version
return ((Invoke-WebRequest -Uri $WAUurl -UseBasicParsing | ConvertFrom-Json)[0].tag_name).Replace('v', '')
}
diff --git a/Winget-AutoUpdate/functions/Get-WingetCmd.ps1 b/Winget-AutoUpdate/functions/Get-WingetCmd.ps1
index eec9904..72bd927 100644
--- a/Winget-AutoUpdate/functions/Get-WingetCmd.ps1
+++ b/Winget-AutoUpdate/functions/Get-WingetCmd.ps1
@@ -1,43 +1,53 @@
# Function to get the winget command regarding execution context (User, System...)
-Function Get-WingetCmd {
-
- # Get WinGet Path (if Admin context)
- # Includes Workaround for ARM64 (removed X64 and replaces it with a wildcard)
- $ResolveWingetPath = (Resolve-Path -Path "$env:ProgramFiles\WindowsApps\Microsoft.DesktopAppInstaller_*_*__8wekyb3d8bbwe" | Sort-Object -Property { [version]($_.Path -replace '^[^\d]+_((\d+\.)*\d+)_.*', '$1') })
-
- if ($ResolveWingetPath) {
- # If multiple version, pick last one
- $WingetPath = $ResolveWingetPath[-1].Path
- }
-
- #If running under System or Admin context obtain Winget from Program Files
- if((([Security.Principal.WindowsIdentity]::GetCurrent().User) -eq 'S-1-5-18') -or ($WingetPath)){
- if (Test-Path -Path ('{0}\winget.exe' -f $WingetPath) -ErrorAction SilentlyContinue) {
- $Script:Winget = ('{0}\winget.exe' -f $WingetPath)
- }
- }else{
- #Get Winget Location in User context
- $WingetCmd = (Get-Command -Name winget.exe -ErrorAction SilentlyContinue)
-
- if ($WingetCmd) {
- $Script:Winget = $WingetCmd.Source
- }
- }
-
- If(!($Script:Winget)){
- Write-ToLog 'Winget not installed or detected !' 'Red'
-
- return $false
- }
-
- # Run winget to list apps and accept source agrements (necessary on first run)
- $null = (& $Winget list --accept-source-agreements -s winget)
-
- # Log Winget installed version
- $WingetVer = & $Winget --version
- Write-ToLog ('Winget Version: {0}' -f $WingetVer)
-
- return $true
-
+function Get-WingetCmd
+{
+
+ # Get WinGet Path (if Admin context)
+ # Includes Workaround for ARM64 (removed X64 and replaces it with a wildcard)
+ $ResolveWingetPath = (Resolve-Path -Path "$env:ProgramFiles\WindowsApps\Microsoft.DesktopAppInstaller_*_*__8wekyb3d8bbwe" | Sort-Object -Property {
+ [version]($_.Path -replace '^[^\d]+_((\d+\.)*\d+)_.*', '$1')
+ })
+
+ if ($ResolveWingetPath)
+ {
+ # If multiple version, pick last one
+ $WingetPath = $ResolveWingetPath[-1].Path
+ }
+
+ #If running under System or Admin context obtain Winget from Program Files
+ if ((([Security.Principal.WindowsIdentity]::GetCurrent().User) -eq 'S-1-5-18') -or ($WingetPath))
+ {
+ if (Test-Path -Path ('{0}\winget.exe' -f $WingetPath) -ErrorAction SilentlyContinue)
+ {
+ $Script:Winget = ('{0}\winget.exe' -f $WingetPath)
+ }
+ }
+ else
+ {
+ #Get Winget Location in User context
+ $WingetCmd = (Get-Command -Name winget.exe -ErrorAction SilentlyContinue)
+
+ if ($WingetCmd)
+ {
+ $Script:Winget = $WingetCmd.Source
+ }
+ }
+
+ if (!($Script:Winget))
+ {
+ Write-ToLog 'Winget not installed or detected !' 'Red'
+
+ return $false
+ }
+
+ # Run winget to list apps and accept source agrements (necessary on first run)
+ $null = (& $Winget list --accept-source-agreements -s winget)
+
+ # Log Winget installed version
+ $WingetVer = & $Winget --version
+ Write-ToLog ('Winget Version: {0}' -f $WingetVer)
+
+ return $true
+
}
diff --git a/Winget-AutoUpdate/functions/Get-WingetOutdatedApps.ps1 b/Winget-AutoUpdate/functions/Get-WingetOutdatedApps.ps1
index 62242b0..ec52979 100644
--- a/Winget-AutoUpdate/functions/Get-WingetOutdatedApps.ps1
+++ b/Winget-AutoUpdate/functions/Get-WingetOutdatedApps.ps1
@@ -1,6 +1,6 @@
# Function to get the outdated app list, in formatted array
-function Get-WingetOutdatedApps
+function Get-WingetOutdatedApps
{
class Software {
[string]$Name
@@ -8,62 +8,62 @@ function Get-WingetOutdatedApps
[string]$Version
[string]$AvailableVersion
}
-
+
# Get list of available upgrades on winget format
$upgradeResult = (& $Winget upgrade --source winget | Out-String)
-
+
# Start Convertion of winget format to an array. Check if "-----" exists (Winget Error Handling)
- if (!($upgradeResult -match '-----'))
+ if (!($upgradeResult -match '-----'))
{
return "An unusual thing happened (maybe all apps are upgraded):`n$upgradeResult"
}
-
+
# Split winget output to lines
$lines = $upgradeResult.Split([Environment]::NewLine) | Where-Object -FilterScript {
- $_
+ $_
}
-
+
# Find the line that starts with "------"
$fl = 0
- while (-not $lines[$fl].StartsWith('-----'))
+ while (-not $lines[$fl].StartsWith('-----'))
{
$fl++
}
-
+
# Get header line
$fl = $fl - 1
-
+
# Get header titles [without remove seperator]
$index = $lines[$fl] -split '(?<=\s)(?!\s)'
-
+
# Line $fl has the header, we can find char where we find ID and Version [and manage non latin characters]
$idStart = $($index[0] -replace '[\u4e00-\u9fa5]', '**').Length
$versionStart = $idStart + $($index[1] -replace '[\u4e00-\u9fa5]', '**').Length
$availableStart = $versionStart + $($index[2] -replace '[\u4e00-\u9fa5]', '**').Length
-
+
# Now cycle in real package and split accordingly
$upgradeList = @()
-
- For ($i = $fl + 2; $i -lt $lines.Length; $i++)
+
+ for ($i = $fl + 2; $i -lt $lines.Length; $i++)
{
$line = $lines[$i] -replace '[\u2026]', ' ' #Fix "..." in long names
-
- if ($line.StartsWith('-----'))
+
+ if ($line.StartsWith('-----'))
{
# Get header line
$fl = $i - 1
-
+
# Get header titles [without remove seperator]
$index = $lines[$fl] -split '(?<=\s)(?!\s)'
-
+
# Line $fl has the header, we can find char where we find ID and Version [and manage non latin characters]
$idStart = $($index[0] -replace '[\u4e00-\u9fa5]', '**').Length
$versionStart = $idStart + $($index[1] -replace '[\u4e00-\u9fa5]', '**').Length
$availableStart = $versionStart + $($index[2] -replace '[\u4e00-\u9fa5]', '**').Length
}
-
+
# (Alphanumeric | Literal . | Alphanumeric) - the only unique thing in common for lines with applications
- if ($line -match '\w\.\w')
+ if ($line -match '\w\.\w')
{
$software = [Software]::new()
# Manage non latin characters
@@ -76,17 +76,17 @@ function Get-WingetOutdatedApps
$upgradeList += $software
}
}
-
+
# If current user is not system, remove system apps from list
- if ($IsSystem -eq $false)
+ if ($IsSystem -eq $false)
{
$SystemApps = Get-Content -Path ('{0}\winget_system_apps.txt' -f $WorkingDir)
$upgradeList = $upgradeList | Where-Object -FilterScript {
- $SystemApps -notcontains $_.Id
+ $SystemApps -notcontains $_.Id
}
}
-
+
return $upgradeList | Sort-Object -Property {
- Get-Random
+ Get-Random
}
}
diff --git a/Winget-AutoUpdate/functions/Get-WingetSystemApps.ps1 b/Winget-AutoUpdate/functions/Get-WingetSystemApps.ps1
index 0d1bedf..0692984 100644
--- a/Winget-AutoUpdate/functions/Get-WingetSystemApps.ps1
+++ b/Winget-AutoUpdate/functions/Get-WingetSystemApps.ps1
@@ -1,17 +1,17 @@
-function Get-WingetSystemApps
+function Get-WingetSystemApps
{
# Json File, where to export system installed apps
$jsonFile = ('{0}\winget_system_apps.txt' -f $WorkingDir)
-
+
# Get list of installed Winget apps to json file
$null = (& $Winget export -o $jsonFile --accept-source-agreements -s winget)
-
+
# Convert json file to txt file with app ids
$InstalledApps = (Get-Content -Path $jsonFile | ConvertFrom-Json)
-
+
# Save app list
$null = (Set-Content -Value $InstalledApps.Sources.Packages.PackageIdentifier -Path $jsonFile -Force -Confirm:$False -ErrorAction SilentlyContinue)
-
+
# Sort app list
$null = (Get-Content -Path $jsonFile | Sort-Object | Set-Content -Path $jsonFile -Force -Confirm:$False -ErrorAction SilentlyContinue)
}
diff --git a/Winget-AutoUpdate/functions/Invoke-LogRotation.ps1 b/Winget-AutoUpdate/functions/Invoke-LogRotation.ps1
index 86c40b7..ebc46c1 100644
--- a/Winget-AutoUpdate/functions/Invoke-LogRotation.ps1
+++ b/Winget-AutoUpdate/functions/Invoke-LogRotation.ps1
@@ -1,6 +1,6 @@
# Function to rotate the logs
-function Invoke-LogRotation
+function Invoke-LogRotation
{
<#
.SYNOPSIS
@@ -12,38 +12,41 @@ function Invoke-LogRotation
URL: https://www.powershellgallery.com/packages/Communary.Logger/1.1
Date: 21.11.2014
Version: 1.0
- #>
+ #>
param
(
- [string]$LogFile,
- [int]$MaxLogFiles,
- [int]$MaxLogSize
+ [string]
+ $LogFile,
+ [int]
+ $MaxLogFiles,
+ [int]
+ $MaxLogSize
)
- try
+ try
{
# get current size of log file
$currentSize = (Get-Item -Path $LogFile).Length
-
+
# get log name
$logFileName = (Split-Path -Path $LogFile -Leaf)
$logFilePath = (Split-Path -Path $LogFile)
$logFileNameWithoutExtension = [IO.Path]::GetFileNameWithoutExtension($logFileName)
$logFileNameExtension = [IO.Path]::GetExtension($logFileName)
-
+
# if MaxLogFiles is 1 just keep the original one and let it grow
- if (-not($MaxLogFiles -eq 1))
+ if (-not ($MaxLogFiles -eq 1))
{
- if ($currentSize -ge $MaxLogSize)
+ if ($currentSize -ge $MaxLogSize)
{
# construct name of archived log file
$newLogFileName = $logFileNameWithoutExtension + (Get-Date -Format 'yyyyMMddHHmmss').ToString() + $logFileNameExtension
-
+
# copy old log file to new using the archived name constructed above
$null = (Copy-Item -Path $LogFile -Destination (Join-Path -Path (Split-Path -Path $LogFile) -ChildPath $newLogFileName))
-
+
# Create a new log file
- try
+ try
{
$null = (Remove-Item -Path $LogFile -Force -Confirm:$False -ErrorAction SilentlyContinue)
$null = (New-Item -ItemType File -Path $LogFile -Force -Confirm:$False -ErrorAction SilentlyContinue)
@@ -57,59 +60,59 @@ function Invoke-LogRotation
$NewAcl.SetAccessRule($fileSystemAccessRule)
$null = (Set-Acl -Path $LogFile -AclObject $NewAcl)
}
- catch
+ catch
{
- Return $False
+ return $False
}
-
+
# if MaxLogFiles is 0 don't delete any old archived log files
- if (-not($MaxLogFiles -eq 0))
+ if (-not ($MaxLogFiles -eq 0))
{
# set filter to search for archived log files
$archivedLogFileFilter = $logFileNameWithoutExtension + '??????????????' + $logFileNameExtension
-
+
# get archived log files
$oldLogFiles = (Get-Item -Path "$(Join-Path -Path $logFilePath -ChildPath $archivedLogFileFilter)")
-
- if ([bool]$oldLogFiles)
+
+ if ([bool]$oldLogFiles)
{
# compare found log files to MaxLogFiles parameter of the log object, and delete oldest until we are
# back to the correct number
- if (($oldLogFiles.Count + 1) -gt $MaxLogFiles)
+ if (($oldLogFiles.Count + 1) -gt $MaxLogFiles)
{
[int]$numTooMany = (($oldLogFiles.Count) + 1) - $MaxLogFiles
- $null = ($oldLogFiles | Sort-Object -Property 'LastWriteTime' | Select-Object -First $numTooMany | Remove-Item -Force -Confirm:$False -ErrorAction SilentlyContinue)
+ $null = ($oldLogFiles | Sort-Object -Property 'LastWriteTime' | Select-Object -First $numTooMany | Remove-Item -Force -Confirm:$False -ErrorAction SilentlyContinue)
}
}
}
-
+
# Log Header
$Log = "##################################################`n# CHECK FOR APP UPDATES - $(Get-Date -Format (Get-Culture).DateTimeFormat.ShortDatePattern)`n##################################################"
$null = ($Log | Out-File -FilePath $LogFile -Append -Force)
Write-ToLog -LogMsg 'Running in System context'
-
- if ($ActivateGPOManagement)
+
+ if ($ActivateGPOManagement)
{
Write-ToLog -LogMsg 'Activated WAU GPO Management detected, comparing...'
-
- if ($null -ne $ChangedSettings -and $ChangedSettings -ne 0)
+
+ if ($null -ne $ChangedSettings -and $ChangedSettings -ne 0)
{
Write-ToLog -LogMsg 'Changed settings detected and applied' -LogColor 'Yellow'
}
- else
+ else
{
Write-ToLog -LogMsg 'No Changed settings detected' -LogColor 'Yellow'
}
}
-
+
Write-ToLog -LogMsg ('Max Log Size reached: {0} bytes - Rotated Logs' -f $MaxLogSize)
-
- Return $True
+
+ return $True
}
}
}
- catch
+ catch
{
- Return $False
+ return $False
}
}
diff --git a/Winget-AutoUpdate/functions/Invoke-ModsProtect.ps1 b/Winget-AutoUpdate/functions/Invoke-ModsProtect.ps1
index 1d33a33..ec3f270 100644
--- a/Winget-AutoUpdate/functions/Invoke-ModsProtect.ps1
+++ b/Winget-AutoUpdate/functions/Invoke-ModsProtect.ps1
@@ -2,15 +2,16 @@
# Security: Mods directory must be protected (Users could create scripts of their own - then they'll run in System Context)!
# Check if Local Users have write rights in Mods directory or not (and take action if necessary):
-function Invoke-ModsProtect
+function Invoke-ModsProtect
{
[CmdletBinding()]
param
(
- [string]$ModsPath
+ [string]
+ $ModsPath
)
-
- try
+
+ try
{
$directory = (Get-Item -Path $ModsPath -ErrorAction SilentlyContinue)
$acl = (Get-Acl -Path $directory.FullName)
@@ -21,60 +22,60 @@ function Invoke-ModsProtect
$userName = $ntAccount.Value
$userRights = [Security.AccessControl.FileSystemRights]'Write'
$hasWriteAccess = $False
-
- foreach ($access in $acl.Access)
+
+ foreach ($access in $acl.Access)
{
- if ($access.IdentityReference.Value -eq $userName -and $access.FileSystemRights -eq $userRights)
+ if ($access.IdentityReference.Value -eq $userName -and $access.FileSystemRights -eq $userRights)
{
$hasWriteAccess = $True
break
}
}
-
- if ($hasWriteAccess)
+
+ if ($hasWriteAccess)
{
# Disable inheritance
$acl.SetAccessRuleProtection($True, $True)
-
+
# Remove any existing rules
$acl.Access | ForEach-Object -Process {
- $acl.RemoveAccessRule($_)
+ $acl.RemoveAccessRule($_)
}
-
+
# SYSTEM Full - S-1-5-18
$userSID = (New-Object -TypeName System.Security.Principal.SecurityIdentifier -ArgumentList ('S-1-5-18'))
$rule = (New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList ($userSID, 'FullControl', 'ContainerInherit,ObjectInherit', 'None', 'Allow'))
$acl.SetAccessRule($rule)
# Save the updated ACL
$null = (Set-Acl -Path $directory.FullName -AclObject $acl)
-
+
# Administrators Full - S-1-5-32-544
$acl = (Get-Acl -Path $directory.FullName)
$userSID = (New-Object -TypeName System.Security.Principal.SecurityIdentifier -ArgumentList ('S-1-5-32-544'))
$rule = (New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList ($userSID, 'FullControl', 'ContainerInherit,ObjectInherit', 'None', 'Allow'))
$acl.SetAccessRule($rule)
$null = (Set-Acl -Path $directory.FullName -AclObject $acl)
-
+
# Local Users ReadAndExecute - S-1-5-32-545 S-1-5-11
$acl = (Get-Acl -Path $directory.FullName)
$userSID = (New-Object -TypeName System.Security.Principal.SecurityIdentifier -ArgumentList ('S-1-5-32-545'))
$rule = (New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList ($userSID, 'ReadAndExecute', 'ContainerInherit,ObjectInherit', 'None', 'Allow'))
$acl.SetAccessRule($rule)
$null = (Set-Acl -Path $directory.FullName -AclObject $acl)
-
+
# Authenticated Users ReadAndExecute - S-1-5-11
$acl = (Get-Acl -Path $directory.FullName)
$userSID = (New-Object -TypeName System.Security.Principal.SecurityIdentifier -ArgumentList ('S-1-5-11'))
$rule = (New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList ($userSID, 'ReadAndExecute', 'ContainerInherit,ObjectInherit', 'None', 'Allow'))
$acl.SetAccessRule($rule)
$null = (Set-Acl -Path $directory.FullName -AclObject $acl)
-
+
return $True
}
-
+
return $False
}
- catch
+ catch
{
return 'Error'
}
diff --git a/Winget-AutoUpdate/functions/Invoke-PostUpdateActions.ps1 b/Winget-AutoUpdate/functions/Invoke-PostUpdateActions.ps1
index 558e769..3e1082f 100644
--- a/Winget-AutoUpdate/functions/Invoke-PostUpdateActions.ps1
+++ b/Winget-AutoUpdate/functions/Invoke-PostUpdateActions.ps1
@@ -1,47 +1,47 @@
# Function to make actions after WAU update
-function Invoke-PostUpdateActions
+function Invoke-PostUpdateActions
{
# log
Write-ToLog -LogMsg 'Running Post Update actions:' -LogColor 'yellow'
-
+
# Check if Intune Management Extension Logs folder and WAU-updates.log exists, make symlink
- if ((Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs" -ErrorAction SilentlyContinue) -and !(Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-updates.log" -ErrorAction SilentlyContinue))
+ if ((Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs" -ErrorAction SilentlyContinue) -and !(Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-updates.log" -ErrorAction SilentlyContinue))
{
Write-ToLog -LogMsg '-> Creating SymLink for log file in Intune Management Extension log folder' -LogColor 'yellow'
$null = New-Item -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-updates.log" -ItemType SymbolicLink -Value $LogFile -Force -ErrorAction SilentlyContinue
}
-
+
# Check if Intune Management Extension Logs folder and WAU-install.log exists, make symlink
- if ((Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs" -ErrorAction SilentlyContinue) -and (Test-Path -Path ('{0}\logs\install.log' -f $WorkingDir) -ErrorAction SilentlyContinue) -and !(Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-install.log" -ErrorAction SilentlyContinue))
+ if ((Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs" -ErrorAction SilentlyContinue) -and (Test-Path -Path ('{0}\logs\install.log' -f $WorkingDir) -ErrorAction SilentlyContinue) -and !(Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-install.log" -ErrorAction SilentlyContinue))
{
Write-Host -Object "`nCreating SymLink for log file (WAU-install) in Intune Management Extension log folder" -ForegroundColor Yellow
$null = (New-Item -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-install.log" -ItemType SymbolicLink -Value ('{0}\logs\install.log' -f $WorkingDir) -Force -Confirm:$False -ErrorAction SilentlyContinue)
}
-
+
Write-ToLog -LogMsg '-> Checking prerequisites...' -LogColor 'yellow'
-
+
# Check if Visual C++ 2019 or 2022 installed
$Visual2019 = 'Microsoft Visual C++ 2015-2019 Redistributable*'
$Visual2022 = 'Microsoft Visual C++ 2015-2022 Redistributable*'
$path = (Get-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' -ErrorAction SilentlyContinue | Where-Object -FilterScript {
$_.GetValue('DisplayName') -like $Visual2019 -or $_.GetValue('DisplayName') -like $Visual2022
- })
-
+ })
+
# If not installed, install
- if (!($path))
+ if (!($path))
{
- try
+ try
{
- if ((Get-CimInstance -ClassName Win32_OperatingSystem).OSArchitecture -like '*64*')
+ if ((Get-CimInstance -ClassName Win32_OperatingSystem).OSArchitecture -like '*64*')
{
$OSArch = 'x64'
}
- else
+ else
{
$OSArch = 'x86'
}
-
+
Write-ToLog -LogMsg ('-> Downloading VC_redist.{0}.exe...' -f $OSArch)
$SourceURL = ('https://aka.ms/vs/17/release/VC_redist.{0}.exe' -f $OSArch)
$Installer = ('{0}\VC_redist.{1}.exe' -f $WAUConfig.InstallLocation, $OSArch)
@@ -52,70 +52,70 @@ function Invoke-PostUpdateActions
Remove-Item -Path $Installer -ErrorAction Ignore
Write-ToLog -LogMsg '-> MS Visual C++ 2015-2022 installed successfully' -LogColor 'green'
}
- catch
+ catch
{
Write-ToLog -LogMsg '-> MS Visual C++ 2015-2022 installation failed.' -LogColor 'red'
}
}
- else
+ else
{
Write-ToLog -LogMsg '-> Prerequisites checked. OK' -LogColor 'green'
}
-
+
# Check Package Install
Write-ToLog -LogMsg '-> Checking if Winget is installed/up to date' -LogColor 'yellow'
$TestWinGet = Get-AppxProvisionedPackage -Online | Where-Object -FilterScript {
$_.DisplayName -eq 'Microsoft.DesktopAppInstaller'
}
-
+
# Current: v1.5.2201 = 1.20.2201.0 = 2023.808.2243.0
- If ([Version]$TestWinGet.Version -ge '2023.808.2243.0')
+ if ([Version]$TestWinGet.Version -ge '2023.808.2243.0')
{
Write-ToLog -LogMsg '-> WinGet is Installed/up to date' -LogColor 'green'
}
- Else
+ else
{
# Download WinGet MSIXBundle
Write-ToLog -LogMsg '-> Not installed/up to date. Downloading WinGet...'
$WinGetURL = 'https://github.com/microsoft/winget-cli/releases/download/v1.5.2201/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle'
$WebClient = New-Object -TypeName System.Net.WebClient
$WebClient.DownloadFile($WinGetURL, ('{0}\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle' -f $WAUConfig.InstallLocation))
-
+
# Install WinGet MSIXBundle
- try
+ try
{
Write-ToLog -LogMsg '-> Installing Winget MSIXBundle for App Installer...'
$null = Add-AppxProvisionedPackage -Online -PackagePath ('{0}\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle' -f $WAUConfig.InstallLocation) -SkipLicense
Write-ToLog -LogMsg '-> Installed Winget MSIXBundle for App Installer' -LogColor 'green'
}
- catch
+ catch
{
Write-ToLog -LogMsg '-> Failed to intall Winget MSIXBundle for App Installer...' -LogColor 'red'
}
-
+
# Remove WinGet MSIXBundle
Remove-Item -Path ('{0}\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle' -f $WAUConfig.InstallLocation) -Force -Confirm:$False -ErrorAction Continue
}
-
+
# Reset Winget Sources
$ResolveWingetPath = Resolve-Path -Path "$env:programfiles\WindowsApps\Microsoft.DesktopAppInstaller_*_*__8wekyb3d8bbwe\winget.exe" | Sort-Object -Property {
[version]($_.Path -replace '^[^\d]+_((\d+\.)*\d+)_.*', '$1')
}
-
- if ($ResolveWingetPath)
+
+ if ($ResolveWingetPath)
{
# If multiple version, pick last one
$WingetPath = $ResolveWingetPath[-1].Path
& $WingetPath source reset --force
-
+
# log
Write-ToLog -LogMsg '-> Winget sources reseted.' -LogColor 'green'
}
-
+
# Create WAU Regkey if not present
$regPath = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate'
-
- if (!(Test-Path -Path $regPath -ErrorAction SilentlyContinue))
+
+ if (!(Test-Path -Path $regPath -ErrorAction SilentlyContinue))
{
$null = (New-Item -Path $regPath -Force -Confirm:$False -ErrorAction SilentlyContinue)
$null = (New-ItemProperty -Path $regPath -Name DisplayName -Value 'Winget-AutoUpdate (WAU)' -Force -Confirm:$False -ErrorAction SilentlyContinue)
@@ -128,162 +128,162 @@ function Invoke-PostUpdateActions
$null = (New-ItemProperty -Path $regPath -Name UninstallString -Value "powershell.exe -noprofile -executionpolicy bypass -file `"$WorkingDir\WAU-Uninstall.ps1`"" -Force -Confirm:$False -ErrorAction SilentlyContinue)
$null = (New-ItemProperty -Path $regPath -Name QuietUninstallString -Value "powershell.exe -noprofile -executionpolicy bypass -file `"$WorkingDir\WAU-Uninstall.ps1`"" -Force -Confirm:$False -ErrorAction SilentlyContinue)
$null = (New-ItemProperty -Path $regPath -Name WAU_UpdatePrerelease -Value 0 -PropertyType DWord -Force -Confirm:$False -ErrorAction SilentlyContinue)
-
+
#log
Write-ToLog -LogMsg ('-> {0} created.' -f $regPath) -LogColor 'green'
}
-
+
# Fix Notif where WAU_NotificationLevel is not set
$regNotif = Get-ItemProperty -Path $regPath -Name WAU_NotificationLevel -ErrorAction SilentlyContinue
-
- if (!$regNotif)
+
+ if (!$regNotif)
{
New-ItemProperty -Path $regPath -Name WAU_NotificationLevel -Value Full -Force
-
+
# log
Write-ToLog -LogMsg "-> Notification level setting was missing. Fixed with 'Full' option."
}
-
+
# Set WAU_MaxLogFiles/WAU_MaxLogSize if not set
$MaxLogFiles = Get-ItemProperty -Path $regPath -Name WAU_MaxLogFiles -ErrorAction SilentlyContinue
-
- if (!$MaxLogFiles)
+
+ if (!$MaxLogFiles)
{
$null = (New-ItemProperty -Path $regPath -Name WAU_MaxLogFiles -Value 3 -PropertyType DWord -Force -Confirm:$False -ErrorAction SilentlyContinue)
$null = (New-ItemProperty -Path $regPath -Name WAU_MaxLogSize -Value 1048576 -PropertyType DWord -Force -Confirm:$False -ErrorAction SilentlyContinue)
-
+
# log
Write-ToLog -LogMsg '-> MaxLogFiles/MaxLogSize setting was missing. Fixed with 3/1048576 (in bytes, default is 1048576 = 1 MB).'
}
-
+
# Set WAU_ListPath if not set
$ListPath = Get-ItemProperty -Path $regPath -Name WAU_ListPath -ErrorAction SilentlyContinue
-
- if (!$ListPath)
+
+ if (!$ListPath)
{
$null = (New-ItemProperty -Path $regPath -Name WAU_ListPath -Force -Confirm:$False -ErrorAction SilentlyContinue)
-
+
# log
Write-ToLog -LogMsg '-> ListPath setting was missing. Fixed with empty string.'
}
-
+
# Set WAU_ModsPath if not set
$ModsPath = (Get-ItemProperty -Path $regPath -Name WAU_ModsPath -ErrorAction SilentlyContinue)
-
- if (!$ModsPath)
+
+ if (!$ModsPath)
{
$null = (New-ItemProperty -Path $regPath -Name WAU_ModsPath -Force -Confirm:$False -ErrorAction SilentlyContinue)
-
+
# log
Write-ToLog -LogMsg '-> ModsPath setting was missing. Fixed with empty string.'
}
-
+
# Security check
Write-ToLog -LogMsg '-> Checking Mods Directory:' -LogColor 'yellow'
$Protected = Invoke-ModsProtect ('{0}\mods' -f $WAUConfig.InstallLocation)
-
- if ($Protected -eq $True)
+
+ if ($Protected -eq $True)
{
Write-ToLog -LogMsg '-> The mods directory is now secured!' -LogColor 'green'
}
- elseif ($Protected -eq $False)
+ elseif ($Protected -eq $False)
{
Write-ToLog -LogMsg '-> The mods directory was already secured!' -LogColor 'green'
}
- else
+ else
{
Write-ToLog -LogMsg "-> Error: The mods directory couldn't be verified as secured!" -LogColor 'red'
}
-
+
# Convert about.xml if exists (old WAU versions) to reg
$WAUAboutPath = ('{0}\config\about.xml' -f $WorkingDir)
-
- if (Test-Path -Path $WAUAboutPath -ErrorAction SilentlyContinue)
+
+ if (Test-Path -Path $WAUAboutPath -ErrorAction SilentlyContinue)
{
[xml]$About = Get-Content -Path $WAUAboutPath -Encoding UTF8 -ErrorAction SilentlyContinue
$null = (New-ItemProperty -Path $regPath -Name DisplayVersion -Value $About.app.version -Force -Confirm:$False -ErrorAction SilentlyContinue)
-
+
# Remove file once converted
$null = (Remove-Item -Path $WAUAboutPath -Force -Confirm:$False)
-
+
#log
Write-ToLog -LogMsg ('-> {0} converted.' -f $WAUAboutPath) -LogColor 'green'
}
-
+
# Convert config.xml if exists (previous WAU versions) to reg
$WAUConfigPath = ('{0}\config\config.xml' -f $WorkingDir)
-
- if (Test-Path -Path $WAUConfigPath -ErrorAction SilentlyContinue)
+
+ if (Test-Path -Path $WAUConfigPath -ErrorAction SilentlyContinue)
{
[xml]$Config = (Get-Content -Path $WAUConfigPath -Encoding UTF8 -ErrorAction SilentlyContinue)
-
- if ($Config.app.WAUautoupdate -eq 'False')
+
+ if ($Config.app.WAUautoupdate -eq 'False')
{
$null = (New-ItemProperty -Path $regPath -Name WAU_DisableAutoUpdate -Value 1 -Force -Confirm:$False -ErrorAction SilentlyContinue)
}
-
- if ($Config.app.NotificationLevel)
+
+ if ($Config.app.NotificationLevel)
{
$null = (New-ItemProperty -Path $regPath -Name WAU_NotificationLevel -Value $Config.app.NotificationLevel -Force -Confirm:$False -ErrorAction SilentlyContinue)
}
-
- if ($Config.app.UseWAUWhiteList -eq 'True')
+
+ if ($Config.app.UseWAUWhiteList -eq 'True')
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UseWhiteList -Value 1 -PropertyType DWord -Force -Confirm:$False -ErrorAction SilentlyContinue)
}
-
- if ($Config.app.WAUprerelease -eq 'True')
+
+ if ($Config.app.WAUprerelease -eq 'True')
{
$null = (New-ItemProperty -Path $regPath -Name WAU_UpdatePrerelease -Value 1 -PropertyType DWord -Force -Confirm:$False -ErrorAction SilentlyContinue)
}
-
+
# Remove file once converted
$null = (Remove-Item -Path $WAUConfigPath -Force -Confirm:$False)
-
+
# log
Write-ToLog -LogMsg ('-> {0} converted.' -f $WAUConfigPath) -LogColor 'green'
}
-
+
# Remove old functions / files
$FileNames = @(
- ('{0}\functions\Get-WAUConfig.ps1' -f $WorkingDir),
- ('{0}\functions\Get-WAUCurrentVersion.ps1' -f $WorkingDir),
- ('{0}\functions\Get-WAUUpdateStatus.ps1' -f $WorkingDir),
- ('{0}\functions\Write-Log.ps1' -f $WorkingDir),
+ ('{0}\functions\Get-WAUConfig.ps1' -f $WorkingDir),
+ ('{0}\functions\Get-WAUCurrentVersion.ps1' -f $WorkingDir),
+ ('{0}\functions\Get-WAUUpdateStatus.ps1' -f $WorkingDir),
+ ('{0}\functions\Write-Log.ps1' -f $WorkingDir),
('{0}\Version.txt' -f $WorkingDir)
)
-
- foreach ($FileName in $FileNames)
+
+ foreach ($FileName in $FileNames)
{
- if (Test-Path -Path $FileName -ErrorAction SilentlyContinue)
+ if (Test-Path -Path $FileName -ErrorAction SilentlyContinue)
{
$null = (Remove-Item -Path $FileName -Force -Confirm:$False -ErrorAction SilentlyContinue)
-
+
# log
Write-ToLog -LogMsg ('-> {0} removed.' -f $FileName) -LogColor 'green'
}
}
-
+
# Remove old registry key
$RegistryKeys = @(
- 'VersionMajor',
+ 'VersionMajor',
'VersionMinor'
)
-
- foreach ($RegistryKey in $RegistryKeys)
+
+ foreach ($RegistryKey in $RegistryKeys)
{
- if (Get-ItemProperty -Path $regPath -Name $RegistryKey -ErrorAction SilentlyContinue)
+ if (Get-ItemProperty -Path $regPath -Name $RegistryKey -ErrorAction SilentlyContinue)
{
$null = (Remove-ItemProperty -Path $regPath -Name $RegistryKey -Force -Confirm:$False -ErrorAction SilentlyContinue)
}
}
-
+
# Reset WAU_UpdatePostActions Value
$null = ($WAUConfig | New-ItemProperty -Name WAU_PostUpdateActions -Value 0 -Force -Confirm:$False -ErrorAction SilentlyContinue)
-
+
# Get updated WAU Config
$Script:WAUConfig = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate')
-
+
# log
Write-ToLog -LogMsg 'Post Update actions finished' -LogColor 'green'
}
diff --git a/Winget-AutoUpdate/functions/Start-Init.ps1 b/Winget-AutoUpdate/functions/Start-Init.ps1
index c0e713b..c3fb503 100644
--- a/Winget-AutoUpdate/functions/Start-Init.ps1
+++ b/Winget-AutoUpdate/functions/Start-Init.ps1
@@ -1,15 +1,15 @@
# Initialisation
-function Start-Init
+function Start-Init
{
# Config console output encoding
[Console]::OutputEncoding = [Text.Encoding]::UTF8
-
+
# Workaround for ARM64 (Access Denied / Win32 internal Server error)
$Script:ProgressPreference = 'SilentlyContinue'
$caller = ((Get-ChildItem -Path $MyInvocation.PSCommandPath).Name)
-
- if ($caller -eq 'Winget-Upgrade.ps1')
+
+ if ($caller -eq 'Winget-Upgrade.ps1')
{
# Log Header
$Log = "`n##################################################`n# CHECK FOR APP UPDATES - $(Get-Date -Format (Get-Culture).DateTimeFormat.ShortDatePattern)`n##################################################"
@@ -17,12 +17,12 @@ function Start-Init
# Logs initialisation
$Script:LogFile = ('{0}\logs\updates.log' -f $WorkingDir)
}
- elseif ($caller -eq 'Winget-AutoUpdate-Install.ps1')
+ elseif ($caller -eq 'Winget-AutoUpdate-Install.ps1')
{
$Script:LogFile = ('{0}\logs\updates.log' -f $WingetUpdatePath)
}
-
- if (!(Test-Path -Path $LogFile -ErrorAction SilentlyContinue))
+
+ if (!(Test-Path -Path $LogFile -ErrorAction SilentlyContinue))
{
# Create file if doesn't exist
$null = (New-Item -ItemType File -Path $LogFile -Force -Confirm:$false)
@@ -36,7 +36,7 @@ function Start-Init
$NewAcl.SetAccessRule($fileSystemAccessRule)
Set-Acl -Path $LogFile -AclObject $NewAcl
}
- elseif ((Test-Path -Path $LogFile -ErrorAction SilentlyContinue) -and ($caller -eq 'Winget-AutoUpdate-Install.ps1'))
+ elseif ((Test-Path -Path $LogFile -ErrorAction SilentlyContinue) -and ($caller -eq 'Winget-AutoUpdate-Install.ps1'))
{
#Set ACL for users on logfile
$NewAcl = (Get-Acl -Path $LogFile)
@@ -48,22 +48,22 @@ function Start-Init
$NewAcl.SetAccessRule($fileSystemAccessRule)
$null = (Set-Acl -Path $LogFile -AclObject $NewAcl)
}
-
+
# Check if Intune Management Extension Logs folder and WAU-updates.log exists, make symlink
- if ((Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs") -and !(Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-updates.log"))
+ if ((Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs") -and !(Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-updates.log"))
{
Write-Host -Object "`nCreating SymLink for log file (WAU-updates) in Intune Management Extension log folder" -ForegroundColor Yellow
$null = New-Item -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-updates.log" -ItemType SymbolicLink -Value $LogFile -Force -ErrorAction SilentlyContinue
}
-
+
# Check if Intune Management Extension Logs folder and WAU-install.log exists, make symlink
- if ((Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs" -ErrorAction SilentlyContinue) -and (Test-Path -Path ('{0}\logs\install.log' -f $WorkingDir) -ErrorAction SilentlyContinue) -and !(Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-install.log" -ErrorAction SilentlyContinue))
+ if ((Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs" -ErrorAction SilentlyContinue) -and (Test-Path -Path ('{0}\logs\install.log' -f $WorkingDir) -ErrorAction SilentlyContinue) -and !(Test-Path -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-install.log" -ErrorAction SilentlyContinue))
{
Write-Host -Object "`nCreating SymLink for log file (WAU-install) in Intune Management Extension log folder" -ForegroundColor Yellow
$null = (New-Item -Path "${env:ProgramData}\Microsoft\IntuneManagementExtension\Logs\WAU-install.log" -ItemType SymbolicLink -Value ('{0}\logs\install.log' -f $WorkingDir) -Force -ErrorAction SilentlyContinue)
}
-
- if ($caller -eq 'Winget-Upgrade.ps1')
+
+ if ($caller -eq 'Winget-Upgrade.ps1')
{
# Log file
$Log | Out-File -FilePath $LogFile -Append -Force
diff --git a/Winget-AutoUpdate/functions/Start-NotifTask.ps1 b/Winget-AutoUpdate/functions/Start-NotifTask.ps1
index 8abb674..ff3dafb 100644
--- a/Winget-AutoUpdate/functions/Start-NotifTask.ps1
+++ b/Winget-AutoUpdate/functions/Start-NotifTask.ps1
@@ -1,39 +1,49 @@
# Function to send the notifications to user
-function Start-NotifTask
+function Start-NotifTask
{
[CmdletBinding()]
- param(
- [String]$Title = 'Winget-AutoUpdate',
- [String]$Message,
- [String]$MessageType,
- [String]$Balise = 'WAU',
- [String]$OnClickAction,
- [String]$Body,
- [String]$Button1Text,
- [String]$Button1Action,
- [Switch]$ButtonDismiss = $false,
- [Switch]$UserRun = $false
+ param (
+ [String]
+ $Title = 'Winget-AutoUpdate',
+ [String]
+ $Message,
+ [String]
+ $MessageType,
+ [String]
+ $Balise = 'WAU',
+ [String]
+ $OnClickAction,
+ [String]
+ $Body,
+ [String]
+ $Button1Text,
+ [String]
+ $Button1Action,
+ [Switch]
+ $ButtonDismiss = $false,
+ [Switch]
+ $UserRun = $false
)
-
- if (($WAUConfig.WAU_NotificationLevel -eq 'Full') -or ($WAUConfig.WAU_NotificationLevel -eq 'SuccessOnly' -and $MessageType -eq 'Success') -or ($UserRun))
+
+ if (($WAUConfig.WAU_NotificationLevel -eq 'Full') -or ($WAUConfig.WAU_NotificationLevel -eq 'SuccessOnly' -and $MessageType -eq 'Success') -or ($UserRun))
{
# XML Toast template creation
[xml]$ToastTemplate = New-Object -TypeName system.Xml.XmlDocument
$ToastTemplate.LoadXml("")
-
+
# Creation of visual node
$XMLvisual = $ToastTemplate.CreateElement('visual')
-
+
# Creation of a binding node
$XMLbinding = $ToastTemplate.CreateElement('binding')
$null = $XMLvisual.AppendChild($XMLbinding)
$XMLbindingAtt1 = ($ToastTemplate.CreateAttribute('template'))
$XMLbindingAtt1.Value = 'ToastGeneric'
$null = $XMLbinding.Attributes.Append($XMLbindingAtt1)
-
+
$XMLimagepath = ('{0}\icons\{1}.png' -f $WorkingDir, $MessageType)
- if (Test-Path -Path $XMLimagepath -ErrorAction SilentlyContinue)
+ if (Test-Path -Path $XMLimagepath -ErrorAction SilentlyContinue)
{
# Creation of a image node
$XMLimage = $ToastTemplate.CreateElement('image')
@@ -45,8 +55,8 @@ function Start-NotifTask
$XMLimageAtt2.Value = ('{0}\icons\{1}.png' -f $WorkingDir, $MessageType)
$null = $XMLimage.Attributes.Append($XMLimageAtt2)
}
-
- if ($Title)
+
+ if ($Title)
{
# Creation of a text node
$XMLtitle = $ToastTemplate.CreateElement('text')
@@ -54,8 +64,8 @@ function Start-NotifTask
$null = $XMLtitle.AppendChild($XMLtitleText)
$null = $XMLbinding.AppendChild($XMLtitle)
}
-
- if ($Message)
+
+ if ($Message)
{
# Creation of a text node
$XMLtext = $ToastTemplate.CreateElement('text')
@@ -63,17 +73,17 @@ function Start-NotifTask
$null = $XMLtext.AppendChild($XMLtextText)
$null = $XMLbinding.AppendChild($XMLtext)
}
-
- if ($Body)
+
+ if ($Body)
{
# Creation of a group node
$XMLgroup = $ToastTemplate.CreateElement('group')
$null = $XMLbinding.AppendChild($XMLgroup)
-
+
# Creation of a subgroup node
$XMLsubgroup = $ToastTemplate.CreateElement('subgroup')
$null = $XMLgroup.AppendChild($XMLsubgroup)
-
+
# Creation of a text node
$XMLcontent = $ToastTemplate.CreateElement('text')
$XMLcontentText = $ToastTemplate.CreateTextNode($Body)
@@ -86,11 +96,11 @@ function Start-NotifTask
$XMLcontentAtt2.Value = 'true'
$null = $XMLcontent.Attributes.Append($XMLcontentAtt2)
}
-
+
# Creation of actions node
$XMLactions = $ToastTemplate.CreateElement('actions')
-
- if ($Button1Text)
+
+ if ($Button1Text)
{
# Creation of action node
$XMLaction = $ToastTemplate.CreateElement('action')
@@ -98,7 +108,7 @@ function Start-NotifTask
$XMLactionAtt1 = $ToastTemplate.CreateAttribute('content')
$XMLactionAtt1.Value = $Button1Text
$null = $XMLaction.Attributes.Append($XMLactionAtt1)
- if ($Button1Action)
+ if ($Button1Action)
{
$XMLactionAtt2 = $ToastTemplate.CreateAttribute('arguments')
$XMLactionAtt2.Value = $Button1Action
@@ -108,8 +118,8 @@ function Start-NotifTask
$null = $XMLaction.Attributes.Append($XMLactionAtt3)
}
}
-
- if ($ButtonDismiss)
+
+ if ($ButtonDismiss)
{
# Creation of action node
$XMLaction = $ToastTemplate.CreateElement('action')
@@ -124,39 +134,39 @@ function Start-NotifTask
$XMLactionAtt3.Value = 'system'
$null = $XMLaction.Attributes.Append($XMLactionAtt3)
}
-
+
# Creation of tag node
$XMLtag = $ToastTemplate.CreateElement('tag')
$XMLtagText = $ToastTemplate.CreateTextNode($Balise)
$null = $XMLtag.AppendChild($XMLtagText)
-
+
# Add the visual node to the xml
$null = $ToastTemplate.LastChild.AppendChild($XMLvisual)
$null = $ToastTemplate.LastChild.AppendChild($XMLactions)
$null = $ToastTemplate.LastChild.AppendChild($XMLtag)
-
- if ($OnClickAction)
+
+ if ($OnClickAction)
{
$null = $ToastTemplate.toast.SetAttribute('activationType', 'Protocol')
$null = $ToastTemplate.toast.SetAttribute('launch', $OnClickAction)
}
-
+
# if not "Interactive" user, run as system
- if ($IsSystem)
+ if ($IsSystem)
{
# Save XML to File
$ToastTemplateLocation = ('{0}\config\' -f $WAUConfig.InstallLocation)
- if (!(Test-Path -Path $ToastTemplateLocation -ErrorAction SilentlyContinue))
+ if (!(Test-Path -Path $ToastTemplateLocation -ErrorAction SilentlyContinue))
{
$null = (New-Item -ItemType Directory -Force -Confirm:$false -Path $ToastTemplateLocation)
}
-
+
$ToastTemplate.Save(('{0}\notif.xml' -f $ToastTemplateLocation))
-
+
# Run Notify scheduled task to notify conneted users
$null = (Get-ScheduledTask -TaskName 'Winget-AutoUpdate-Notify' -ErrorAction SilentlyContinue | Start-ScheduledTask -ErrorAction SilentlyContinue)
}
- else
+ else
{
#else, run as connected user
# Load Assemblies
@@ -164,20 +174,20 @@ function Start-NotifTask
$null = (Add-Type -AssemblyName Windows.Data)
$null = [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime]
$null = [Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime]
-
+
# Prepare XML
$ToastXml = [Windows.Data.Xml.Dom.XmlDocument]::New()
$ToastXml.LoadXml($ToastTemplate.OuterXml)
-
+
# Specify Launcher App ID
$LauncherID = 'Windows.SystemToast.Winget.Notification'
-
+
# Prepare and Create Toast
$ToastMessage = [Windows.UI.Notifications.ToastNotification]::New($ToastXml)
$ToastMessage.Tag = $ToastTemplate.toast.tag
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($LauncherID).Show($ToastMessage)
}
-
+
# Wait for notification to display
Start-Sleep -Seconds 3
}
diff --git a/Winget-AutoUpdate/functions/Test-ListPath.ps1 b/Winget-AutoUpdate/functions/Test-ListPath.ps1
index 210a1cc..86fe8e7 100644
--- a/Winget-AutoUpdate/functions/Test-ListPath.ps1
+++ b/Winget-AutoUpdate/functions/Test-ListPath.ps1
@@ -1,53 +1,56 @@
# Function to check Block/Allow List External Path
-function Test-ListPath
+function Test-ListPath
{
# URL, UNC or Local Path
[CmdletBinding()]
param
(
- [string]$ListPath,
- [string]$UseWhiteList,
- [string]$WingetUpdatePath
+ [string]
+ $ListPath,
+ [string]
+ $UseWhiteList,
+ [string]
+ $WingetUpdatePath
)
- if ($UseWhiteList)
+ if ($UseWhiteList)
{
$ListType = 'included_apps.txt'
}
- else
+ else
{
$ListType = 'excluded_apps.txt'
}
-
+
# Get local and external list paths
$LocalList = -join ($WingetUpdatePath, '\', $ListType)
$ExternalList = -join ($ListPath, '\', $ListType)
-
+
# Check if a list exists
- if (Test-Path -Path $LocalList -ErrorAction SilentlyContinue)
+ if (Test-Path -Path $LocalList -ErrorAction SilentlyContinue)
{
$dateLocal = (Get-Item -Path $LocalList).LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')
}
-
+
# If path is URL
- if ($ListPath -like 'http*')
+ if ($ListPath -like 'http*')
{
$ExternalList = -join ($ListPath, '/', $ListType)
$wc = (New-Object -TypeName System.Net.WebClient)
-
- try
+
+ try
{
$null = $wc.OpenRead($ExternalList).Close()
$dateExternal = ([DateTime]$wc.ResponseHeaders['Last-Modified']).ToString('yyyy-MM-dd HH:mm:ss')
-
- if ($dateExternal -gt $dateLocal)
+
+ if ($dateExternal -gt $dateLocal)
{
- try
+ try
{
$wc.DownloadFile($ExternalList, $LocalList)
}
- catch
+ catch
{
$Script:ReachNoPath = $True
return $False
@@ -55,52 +58,52 @@ function Test-ListPath
return $True
}
}
- catch
+ catch
{
- try
+ try
{
$content = $wc.DownloadString(('{0}' -f $ExternalList))
-
- if ($null -ne $content -and $content -match '\w\.\w')
+
+ if ($null -ne $content -and $content -match '\w\.\w')
{
$wc.DownloadFile($ExternalList, $LocalList)
return $True
}
- else
+ else
{
$Script:ReachNoPath = $True
return $False
}
}
- catch
+ catch
{
$Script:ReachNoPath = $True
return $False
}
}
}
- else
+ else
{
# If path is UNC or local
- if (Test-Path -Path $ExternalList)
+ if (Test-Path -Path $ExternalList)
{
- try
+ try
{
$dateExternal = (Get-Item -Path ('{0}' -f $ExternalList)).LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')
}
- catch
+ catch
{
$Script:ReachNoPath = $True
return $False
}
-
- if ($dateExternal -gt $dateLocal)
+
+ if ($dateExternal -gt $dateLocal)
{
- try
+ try
{
Copy-Item -Path $ExternalList -Destination $LocalList -Force
}
- catch
+ catch
{
$Script:ReachNoPath = $True
return $False
@@ -108,11 +111,11 @@ function Test-ListPath
return $True
}
}
- else
+ else
{
$Script:ReachNoPath = $True
}
-
+
return $False
}
}
diff --git a/Winget-AutoUpdate/functions/Test-Mods.ps1 b/Winget-AutoUpdate/functions/Test-Mods.ps1
index 03e53c1..598c548 100644
--- a/Winget-AutoUpdate/functions/Test-Mods.ps1
+++ b/Winget-AutoUpdate/functions/Test-Mods.ps1
@@ -1,49 +1,50 @@
# Function to check if modification exists within 'mods' directory
-function Test-Mods
+function Test-Mods
{
# Takes care of a null situation
[CmdletBinding()]
param
(
- [string]$app
+ [string]
+ $app
)
-
+
$ModsPreInstall = $null
$ModsOverride = $null
$ModsUpgrade = $null
$ModsInstall = $null
$ModsInstalled = $null
$Mods = ('{0}\mods' -f $WorkingDir)
-
- if (Test-Path -Path ('{0}\{1}-*' -f $Mods, $app) -ErrorAction SilentlyContinue)
+
+ if (Test-Path -Path ('{0}\{1}-*' -f $Mods, $app) -ErrorAction SilentlyContinue)
{
- if (Test-Path -Path ('{0}\{1}-preinstall.ps1' -f $Mods, $app) -ErrorAction SilentlyContinue)
+ if (Test-Path -Path ('{0}\{1}-preinstall.ps1' -f $Mods, $app) -ErrorAction SilentlyContinue)
{
$ModsPreInstall = ('{0}\{1}-preinstall.ps1' -f $Mods, $app)
}
-
- if (Test-Path -Path ('{0}\{1}-override.txt' -f $Mods, $app) -ErrorAction SilentlyContinue)
+
+ if (Test-Path -Path ('{0}\{1}-override.txt' -f $Mods, $app) -ErrorAction SilentlyContinue)
{
$ModsOverride = Get-Content -Path ('{0}\{1}-override.txt' -f $Mods, $app) -Raw
}
-
- if (Test-Path -Path ('{0}\{1}-install.ps1' -f $Mods, $app) -ErrorAction SilentlyContinue)
+
+ if (Test-Path -Path ('{0}\{1}-install.ps1' -f $Mods, $app) -ErrorAction SilentlyContinue)
{
$ModsInstall = ('{0}\{1}-install.ps1' -f $Mods, $app)
$ModsUpgrade = ('{0}\{1}-install.ps1' -f $Mods, $app)
}
-
- if (Test-Path -Path ('{0}\{1}-upgrade.ps1' -f $Mods, $app) -ErrorAction SilentlyContinue)
+
+ if (Test-Path -Path ('{0}\{1}-upgrade.ps1' -f $Mods, $app) -ErrorAction SilentlyContinue)
{
$ModsUpgrade = ('{0}\{1}-upgrade.ps1' -f $Mods, $app)
}
-
- if (Test-Path -Path ('{0}\{1}-installed.ps1' -f $Mods, $app) -ErrorAction SilentlyContinue)
+
+ if (Test-Path -Path ('{0}\{1}-installed.ps1' -f $Mods, $app) -ErrorAction SilentlyContinue)
{
$ModsInstalled = ('{0}\{1}-installed.ps1' -f $Mods, $app)
}
}
-
+
return $ModsPreInstall, $ModsOverride, $ModsUpgrade, $ModsInstall, $ModsInstalled
}
diff --git a/Winget-AutoUpdate/functions/Test-ModsPath.ps1 b/Winget-AutoUpdate/functions/Test-ModsPath.ps1
index 3be0e88..5cdf7dd 100644
--- a/Winget-AutoUpdate/functions/Test-ModsPath.ps1
+++ b/Winget-AutoUpdate/functions/Test-ModsPath.ps1
@@ -1,6 +1,6 @@
#Function to check mods External Path
-function Test-ModsPath
+function Test-ModsPath
{
# URL, UNC or Local Path
# Get local and external Mods paths
@@ -8,38 +8,41 @@ function Test-ModsPath
[CmdletBinding()]
param
(
- [string]$ModsPath,
- [string]$WingetUpdatePath,
- [string]$AzureBlobSASURL
+ [string]
+ $ModsPath,
+ [string]
+ $WingetUpdatePath,
+ [string]
+ $AzureBlobSASURL
)
$LocalMods = -join ($WingetUpdatePath, '\', 'mods')
$ExternalMods = $ModsPath
-
+
# Get File Names Locally
$InternalModsNames = (Get-ChildItem -Path $LocalMods -Name -Recurse -Include *.ps1, *.txt -ErrorAction SilentlyContinue)
$InternalBinsNames = (Get-ChildItem -Path $LocalMods"\bins" -Name -Recurse -Include *.exe -ErrorAction SilentlyContinue)
-
+
# If path is URL
- if ($ExternalMods -like 'http*')
+ if ($ExternalMods -like 'http*')
{
# enable TLS 1.2 and TLS 1.1 protocols
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12, [Net.SecurityProtocolType]::Tls11
# Get Index of $ExternalMods (or index page with href listing of all the Mods)
- try
+ try
{
$WebResponse = (Invoke-WebRequest -Uri $ExternalMods -UseBasicParsing)
}
- catch
+ catch
{
$Script:ReachNoPath = $True
-
+
return $False
}
-
+
# Check for bins, download if newer. Delete if not external
$ExternalBins = ('{0}/bins' -f $ModsPath)
- if ($WebResponse -match 'bins/')
+ if ($WebResponse -match 'bins/')
{
$BinResponse = Invoke-WebRequest -Uri $ExternalBins -UseBasicParsing
# Collect the external list of href links
@@ -49,9 +52,9 @@ function Test-ModsPath
# Modify strings to HREF:s
$index = 0
- foreach ($Bin in $CleanBinLinks)
+ foreach ($Bin in $CleanBinLinks)
{
- if ($Bin)
+ if ($Bin)
{
$CleanBinLinks[$index] = ' ' + $Bin + ''
}
@@ -61,36 +64,36 @@ function Test-ModsPath
# Delete Local Bins that don't exist Externally
$index = 0
$CleanLinks = $BinLinks -replace '/.*/', ''
-
- foreach ($Bin in $InternalBinsNames)
+
+ foreach ($Bin in $InternalBinsNames)
{
- If ($CleanLinks -notcontains $Bin)
+ if ($CleanLinks -notcontains $Bin)
{
$null = (Remove-Item -Path $LocalMods\bins\$Bin -Force -Confirm:$False -ErrorAction SilentlyContinue)
}
-
+
$index++
}
-
+
$CleanBinLinks = $BinLinks -replace '/.*/', ''
$Bin = ''
# Loop through all links
$wc = New-Object -TypeName System.Net.WebClient
$CleanBinLinks | ForEach-Object -Process {
# Check for .exe in listing/HREF:s in an index page pointing to .exe
- if ($_ -like '*.exe')
+ if ($_ -like '*.exe')
{
$dateExternalBin = ''
$dateLocalBin = ''
$null = $wc.OpenRead(('{0}/{1}' -f $ExternalBins, $_)).Close()
$dateExternalBin = ([DateTime]$wc.ResponseHeaders['Last-Modified']).ToString('yyyy-MM-dd HH:mm:ss')
-
- if (Test-Path -Path $LocalMods"\bins\"$_)
+
+ if (Test-Path -Path $LocalMods"\bins\"$_)
{
$dateLocalBin = (Get-Item -Path ('{0}\bins\{1}' -f $LocalMods, $_)).LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')
}
-
- if ($dateExternalBin -gt $dateLocalBin)
+
+ if ($dateExternalBin -gt $dateLocalBin)
{
$SaveBin = Join-Path -Path ('{0}\bins' -f $LocalMods) -ChildPath $_
Invoke-WebRequest -Uri ('{0}/{1}' -f $ExternalBins, $_) -OutFile $SaveBin.Replace('%20', ' ') -UseBasicParsing
@@ -98,76 +101,76 @@ function Test-ModsPath
}
}
}
-
+
# Collect the external list of href links
$ModLinks = $WebResponse.Links | Select-Object -ExpandProperty HREF
# If there's a directory path in the HREF:s, delete it (IIS)
$CleanLinks = $ModLinks -replace '/.*/', ''
# Modify strings to HREF:s
$index = 0
-
- foreach ($Mod in $CleanLinks)
+
+ foreach ($Mod in $CleanLinks)
{
- if ($Mod)
+ if ($Mod)
{
$CleanLinks[$index] = ' ' + $Mod + ''
}
$index++
}
-
+
# Delete Local Mods that don't exist Externally
$DeletedMods = 0
$index = 0
$CleanLinks = $ModLinks -replace '/.*/', ''
-
- foreach ($Mod in $InternalModsNames)
+
+ foreach ($Mod in $InternalModsNames)
{
- If ($CleanLinks -notcontains $Mod)
+ if ($CleanLinks -notcontains $Mod)
{
$null = (Remove-Item -Path $LocalMods\$Mod -Force -Confirm:$False -ErrorAction SilentlyContinue)
$DeletedMods++
}
$index++
}
-
+
$CleanLinks = $ModLinks -replace '/.*/', ''
-
+
# Loop through all links
-
+
$CleanLinks | ForEach-Object -Process {
# Check for .ps1/.txt in listing/HREF:s in an index page pointing to .ps1/.txt
- if (($_ -like '*.ps1') -or ($_ -like '*.txt'))
+ if (($_ -like '*.ps1') -or ($_ -like '*.txt'))
{
- try
+ try
{
$dateExternalMod = ''
$dateLocalMod = ''
$null = $wc.OpenRead(('{0}/{1}' -f $ExternalMods, $_)).Close()
$dateExternalMod = ([DateTime]$wc.ResponseHeaders['Last-Modified']).ToString('yyyy-MM-dd HH:mm:ss')
-
- if (Test-Path -Path $LocalMods"\"$_)
+
+ if (Test-Path -Path $LocalMods"\"$_)
{
$dateLocalMod = (Get-Item -Path ('{0}\{1}' -f $LocalMods, $_)).LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')
}
-
- if ($dateExternalMod -gt $dateLocalMod)
+
+ if ($dateExternalMod -gt $dateLocalMod)
{
- try
+ try
{
$SaveMod = Join-Path -Path ('{0}\' -f $LocalMods) -ChildPath $_
$Mod = '{0}/{1}' -f $ModsPath.TrimEnd('/'), $_
$null = (Invoke-WebRequest -Uri $Mod -OutFile $SaveMod -UseBasicParsing)
$ModsUpdated++
}
- catch
+ catch
{
$Script:ReachNoPath = $True
}
}
}
- catch
+ catch
{
- if (($_ -like '*.ps1') -or ($_ -like '*.txt'))
+ if (($_ -like '*.ps1') -or ($_ -like '*.txt'))
{
$Script:ReachNoPath = $True
}
@@ -177,131 +180,131 @@ function Test-ModsPath
return $ModsUpdated, $DeletedMods
}
# If Path is Azure Blob
- elseif ($ExternalMods -like 'AzureBlob')
+ elseif ($ExternalMods -like 'AzureBlob')
{
Write-ToLog -LogMsg 'Azure Blob Storage set as mod source'
Write-ToLog -LogMsg 'Checking AZCopy'
Get-AZCopy $WingetUpdatePath
-
+
# Safety check to make sure we really do have azcopy.exe and a Blob URL
- if ((Test-Path -Path ('{0}\azcopy.exe' -f $WingetUpdatePath) -PathType Leaf) -and ($null -ne $AzureBlobSASURL))
+ if ((Test-Path -Path ('{0}\azcopy.exe' -f $WingetUpdatePath) -PathType Leaf) -and ($null -ne $AzureBlobSASURL))
{
Write-ToLog -LogMsg 'Syncing Blob storage with local storage'
-
+
$AZCopySyncOutput = & $WingetUpdatePath\azcopy.exe sync $AzureBlobSASURL $LocalMods --from-to BlobLocal --delete-destination=true
$AZCopyOutputLines = $AZCopySyncOutput.Split([Environment]::NewLine)
-
- foreach ( $_ in $AZCopyOutputLines)
+
+ foreach ($_ in $AZCopyOutputLines)
{
$AZCopySyncAdditionsRegex = [regex]::new('(?<=Number of Copy Transfers Completed:\s+)\d+')
$AZCopySyncDeletionsRegex = [regex]::new('(?<=Number of Deletions at Destination:\s+)\d+')
$AZCopySyncErrorRegex = [regex]::new('^Cannot perform sync due to error:')
-
- $AZCopyAdditions = [int] $AZCopySyncAdditionsRegex.Match($_).Value
- $AZCopyDeletions = [int] $AZCopySyncDeletionsRegex.Match($_).Value
-
- if ($AZCopyAdditions -ne 0)
+
+ $AZCopyAdditions = [int]$AZCopySyncAdditionsRegex.Match($_).Value
+ $AZCopyDeletions = [int]$AZCopySyncDeletionsRegex.Match($_).Value
+
+ if ($AZCopyAdditions -ne 0)
{
$ModsUpdated = $AZCopyAdditions
}
-
- if ($AZCopyDeletions -ne 0)
+
+ if ($AZCopyDeletions -ne 0)
{
$DeletedMods = $AZCopyDeletions
}
-
- if ($AZCopySyncErrorRegex.Match($_).Value)
+
+ if ($AZCopySyncErrorRegex.Match($_).Value)
{
- Write-ToLog -LogMsg ('AZCopy Sync Error! {0}' -f $_)
+ Write-ToLog -LogMsg ('AZCopy Sync Error! {0}' -f $_)
}
}
}
- else
+ else
{
Write-ToLog -LogMsg "Error 'azcopy.exe' or SAS Token not found!"
}
-
+
return $ModsUpdated, $DeletedMods
}
- else
+ else
{
# If path is UNC or local
$ExternalBins = ('{0}\bins' -f $ModsPath)
-
- if (Test-Path -Path $ExternalBins"\*.exe")
+
+ if (Test-Path -Path $ExternalBins"\*.exe")
{
$ExternalBinsNames = (Get-ChildItem -Path $ExternalBins -Name -Recurse -Include *.exe)
-
+
# Delete Local Bins that don't exist Externally
- foreach ($Bin in $InternalBinsNames)
+ foreach ($Bin in $InternalBinsNames)
{
- If ($Bin -notin $ExternalBinsNames )
+ if ($Bin -notin $ExternalBinsNames)
{
$null = (Remove-Item -Path $LocalMods\bins\$Bin -Force -Confirm:$False -ErrorAction SilentlyContinue)
}
}
-
+
# Copy newer external bins
- foreach ($Bin in $ExternalBinsNames)
+ foreach ($Bin in $ExternalBinsNames)
{
$dateExternalBin = ''
$dateLocalBin = ''
-
- if (Test-Path -Path $LocalMods"\bins\"$Bin)
+
+ if (Test-Path -Path $LocalMods"\bins\"$Bin)
{
$dateLocalBin = (Get-Item -Path ('{0}\bins\{1}' -f $LocalMods, $Bin)).LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')
}
-
+
$dateExternalBin = (Get-Item -Path ('{0}\{1}' -f $ExternalBins, $Bin)).LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')
-
- if ($dateExternalBin -gt $dateLocalBin)
+
+ if ($dateExternalBin -gt $dateLocalBin)
{
$null = Copy-Item -Path $ExternalBins\$Bin -Destination $LocalMods\bins\$Bin -Force -ErrorAction SilentlyContinue
}
}
}
-
- if ((Test-Path -Path $ExternalMods"\*.ps1") -or (Test-Path -Path $ExternalMods"\*.txt"))
+
+ if ((Test-Path -Path $ExternalMods"\*.ps1") -or (Test-Path -Path $ExternalMods"\*.txt"))
{
# Get File Names Externally
$ExternalModsNames = Get-ChildItem -Path $ExternalMods -Name -Recurse -Include *.ps1, *.txt
-
+
# Delete Local Mods that don't exist Externally
$DeletedMods = 0
-
- foreach ($Mod in $InternalModsNames)
+
+ foreach ($Mod in $InternalModsNames)
{
- If ($Mod -notin $ExternalModsNames )
+ if ($Mod -notin $ExternalModsNames)
{
$null = Remove-Item -Path $LocalMods\$Mod -Force -ErrorAction SilentlyContinue
$DeletedMods++
}
}
-
+
# Copy newer external mods
- foreach ($Mod in $ExternalModsNames)
+ foreach ($Mod in $ExternalModsNames)
{
$dateExternalMod = ''
$dateLocalMod = ''
- if (Test-Path -Path $LocalMods"\"$Mod)
+ if (Test-Path -Path $LocalMods"\"$Mod)
{
$dateLocalMod = (Get-Item -Path ('{0}\{1}' -f $LocalMods, $Mod)).LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')
}
-
+
$dateExternalMod = (Get-Item -Path ('{0}\{1}' -f $ExternalMods, $Mod)).LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')
-
- if ($dateExternalMod -gt $dateLocalMod)
+
+ if ($dateExternalMod -gt $dateLocalMod)
{
$null = Copy-Item -Path $ExternalMods\$Mod -Destination $LocalMods\$Mod -Force -ErrorAction SilentlyContinue
$ModsUpdated++
}
}
}
- else
+ else
{
$Script:ReachNoPath = $True
}
-
+
return $ModsUpdated, $DeletedMods
}
}
diff --git a/Winget-AutoUpdate/functions/Test-Network.ps1 b/Winget-AutoUpdate/functions/Test-Network.ps1
index 7a50781..d0c7eb3 100644
--- a/Winget-AutoUpdate/functions/Test-Network.ps1
+++ b/Winget-AutoUpdate/functions/Test-Network.ps1
@@ -1,58 +1,58 @@
# Function to check the connectivity
-function Test-Network
+function Test-Network
{
#Init
-
+
$timeout = 0
-
+
# Test connectivity during 30 min then timeout
Write-ToLog -LogMsg 'Checking internet connection...' -LogColor 'Yellow'
- While ($timeout -lt 1800)
+ while ($timeout -lt 1800)
{
$URLtoTest = 'https://raw.githubusercontent.com/Romanitho/Winget-AutoUpdate/main/LICENSE'
$URLcontent = ((Invoke-WebRequest -Uri $URLtoTest -UseBasicParsing).content)
-
- if ($URLcontent -like '*MIT License*')
+
+ if ($URLcontent -like '*MIT License*')
{
Write-ToLog -LogMsg 'Connected !' -LogColor 'Green'
-
+
# Check for metered connection
$null = (Add-Type -AssemblyName Windows.Networking)
$null = [Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType = WindowsRuntime]
$cost = [Windows.Networking.Connectivity.NetworkInformation]::GetInternetConnectionProfile().GetConnectionCost()
-
- if ($cost.ApproachingDataLimit -or $cost.OverDataLimit -or $cost.Roaming -or $cost.BackgroundDataUsageRestricted -or ($cost.NetworkCostType -ne 'Unrestricted'))
+
+ if ($cost.ApproachingDataLimit -or $cost.OverDataLimit -or $cost.Roaming -or $cost.BackgroundDataUsageRestricted -or ($cost.NetworkCostType -ne 'Unrestricted'))
{
Write-ToLog -LogMsg 'Metered connection detected.' -LogColor 'Yellow'
-
- if ($WAUConfig.WAU_DoNotRunOnMetered -eq 1)
+
+ if ($WAUConfig.WAU_DoNotRunOnMetered -eq 1)
{
Write-ToLog -LogMsg 'WAU is configured to bypass update checking on metered connection'
return $false
}
- else
+ else
{
Write-ToLog -LogMsg 'WAU is configured to force update checking on metered connection'
return $true
}
}
- else
+ else
{
return $true
}
}
- else
+ else
{
Start-Sleep -Seconds 10
$timeout += 10
-
+
# Send Warning Notif if no connection for 5 min
- if ($timeout -eq 300)
+ if ($timeout -eq 300)
{
# Log
Write-ToLog -LogMsg "Notify 'No connection' sent." -LogColor 'Yellow'
-
+
# Notif
$Title = $NotifLocale.local.outputs.output[0].title
$Message = $NotifLocale.local.outputs.output[0].message
@@ -62,16 +62,16 @@ function Test-Network
}
}
}
-
+
# Send Timeout Notif if no connection for 30 min
Write-ToLog -LogMsg 'Timeout. No internet connection !' -LogColor 'Red'
-
+
# Notif
$Title = $NotifLocale.local.outputs.output[1].title
$Message = $NotifLocale.local.outputs.output[1].message
$MessageType = 'error'
$Balise = 'Connection'
Start-NotifTask -Title $Title -Message $Message -MessageType $MessageType -Balise $Balise
-
+
return $false
}
diff --git a/Winget-AutoUpdate/functions/Test-PendingReboot.ps1 b/Winget-AutoUpdate/functions/Test-PendingReboot.ps1
index fb4235b..e9ea46e 100644
--- a/Winget-AutoUpdate/functions/Test-PendingReboot.ps1
+++ b/Winget-AutoUpdate/functions/Test-PendingReboot.ps1
@@ -1,34 +1,34 @@
# Function to check if there is a Pending Reboot
-function Test-PendingReboot
+function Test-PendingReboot
{
$Computer = $env:COMPUTERNAME
$PendingReboot = $false
-
+
$HKLM = [UInt32] '0x80000002'
$WMI_Reg = [WMIClass] ('\\{0}\root\default:StdRegProv' -f $Computer)
-
- if ($WMI_Reg)
+
+ if ($WMI_Reg)
{
- if (($WMI_Reg.EnumKey($HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\')).sNames -contains 'RebootPending')
+ if (($WMI_Reg.EnumKey($HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\')).sNames -contains 'RebootPending')
{
- $PendingReboot = $true
+ $PendingReboot = $true
}
- if (($WMI_Reg.EnumKey($HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\')).sNames -contains 'RebootRequired')
+ if (($WMI_Reg.EnumKey($HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\')).sNames -contains 'RebootRequired')
{
- $PendingReboot = $true
+ $PendingReboot = $true
}
-
+
# Checking for SCCM namespace
$SCCM_Namespace = Get-WmiObject -Namespace ROOT\CCM\ClientSDK -List -ComputerName $Computer -ErrorAction Ignore
- if ($SCCM_Namespace)
+ if ($SCCM_Namespace)
{
- if (([WmiClass]('\\{0}\ROOT\CCM\ClientSDK:CCM_ClientUtilities' -f $Computer)).DetermineIfRebootPending().RebootPending -eq $true)
+ if (([WmiClass]('\\{0}\ROOT\CCM\ClientSDK:CCM_ClientUtilities' -f $Computer)).DetermineIfRebootPending().RebootPending -eq $true)
{
- $PendingReboot = $true
+ $PendingReboot = $true
}
}
}
-
+
return $PendingReboot
}
diff --git a/Winget-AutoUpdate/functions/Update-App.ps1 b/Winget-AutoUpdate/functions/Update-App.ps1
index d9c3b49..a5549be 100644
--- a/Winget-AutoUpdate/functions/Update-App.ps1
+++ b/Winget-AutoUpdate/functions/Update-App.ps1
@@ -1,6 +1,6 @@
# Function to update an App
-Function Update-App
+function Update-App
{
# Get App Info
[CmdletBinding()]
@@ -9,11 +9,11 @@ Function Update-App
$app
)
$ReleaseNoteURL = Get-AppInfo $app.Id
- if ($ReleaseNoteURL)
+ if ($ReleaseNoteURL)
{
$Button1Text = $NotifLocale.local.outputs.output[10].message
}
-
+
# Send available update notification
Write-ToLog -LogMsg ('Updating {0} from {1} to {2}...' -f $app.Name, $app.Version, $app.AvailableVersion) -LogColor 'Cyan'
$Title = $NotifLocale.local.outputs.output[2].title -f $($app.Name)
@@ -21,99 +21,99 @@ Function Update-App
$MessageType = 'info'
$Balise = $($app.Name)
Start-NotifTask -Title $Title -Message $Message -MessageType $MessageType -Balise $Balise -Button1Action $ReleaseNoteURL -Button1Text $Button1Text
-
+
# Check if mods exist for preinstall/install/upgrade
$ModsPreInstall, $ModsOverride, $ModsUpgrade, $ModsInstall, $ModsInstalled = Test-Mods $($app.Id)
-
+
# Winget upgrade
Write-ToLog -LogMsg ("########## WINGET UPGRADE PROCESS STARTS FOR APPLICATION ID '{0}' ##########" -f $app.Id) -LogColor 'Gray'
-
+
# If PreInstall script exist
- if ($ModsPreInstall)
+ if ($ModsPreInstall)
{
Write-ToLog -LogMsg ('Modifications for {0} before upgrade are being applied...' -f $app.Id) -LogColor 'Yellow'
& "$ModsPreInstall"
}
-
+
# Run Winget Upgrade command
- if ($ModsOverride)
+ if ($ModsOverride)
{
Write-ToLog -LogMsg ('-> Running (overriding default): Winget upgrade --id {0} --accept-package-agreements --accept-source-agreements --override {1}' -f $app.Id, $ModsOverride)
& $Winget upgrade --id $($app.Id) --accept-package-agreements --accept-source-agreements --override $ModsOverride | Tee-Object -FilePath $LogFile -Append
}
- else
+ else
{
Write-ToLog -LogMsg ('-> Running: Winget upgrade --id {0} --accept-package-agreements --accept-source-agreements -h' -f $app.Id)
& $Winget upgrade --id $($app.Id) --accept-package-agreements --accept-source-agreements -h | Tee-Object -FilePath $LogFile -Append
}
-
- if ($ModsUpgrade)
+
+ if ($ModsUpgrade)
{
Write-ToLog -LogMsg ('Modifications for {0} during upgrade are being applied...' -f $app.Id) -LogColor 'Yellow'
& "$ModsUpgrade"
}
-
+
# Check if application updated properly
$FailedToUpgrade = $false
$ConfirmInstall = Confirm-Installation $($app.Id) $($app.AvailableVersion)
-
- if ($ConfirmInstall -ne $true)
+
+ if ($ConfirmInstall -ne $true)
{
# Upgrade failed!
# Test for a Pending Reboot (Component Based Servicing/WindowsUpdate/CCM_ClientUtilities)
$PendingReboot = Test-PendingReboot
- if ($PendingReboot -eq $true)
+ if ($PendingReboot -eq $true)
{
Write-ToLog -LogMsg ("-> A Pending Reboot lingers and probably prohibited {0} from upgrading...`n-> ...an install for {1} is NOT executed!" -f $app.Name) -LogColor 'Red'
$FailedToUpgrade = $true
break
}
-
+
# If app failed to upgrade, run Install command
Write-ToLog -LogMsg ('-> An upgrade for {0} failed, now trying an install instead...' -f $app.Name) -LogColor 'Yellow'
-
- if ($ModsOverride)
+
+ if ($ModsOverride)
{
Write-ToLog -LogMsg ('-> Running (overriding default): Winget install --id {0} --accept-package-agreements --accept-source-agreements --force --override {1}' -f $app.Id, $ModsOverride)
& $Winget install --id $($app.Id) --accept-package-agreements --accept-source-agreements --force --override $ModsOverride | Tee-Object -FilePath $LogFile -Append
}
- else
+ else
{
Write-ToLog -LogMsg ('-> Running: Winget install --id {0} --accept-package-agreements --accept-source-agreements --force -h' -f $app.Id)
& $Winget install --id $($app.Id) --accept-package-agreements --accept-source-agreements --force -h | Tee-Object -FilePath $LogFile -Append
}
-
- if ($ModsInstall)
+
+ if ($ModsInstall)
{
Write-ToLog -LogMsg ('Modifications for {0} during install are being applied...' -f $app.Id) -LogColor 'Yellow'
& "$ModsInstall"
}
-
+
# Check if application installed properly
$ConfirmInstall = Confirm-Installation $($app.Id) $($app.AvailableVersion)
- if ($ConfirmInstall -eq $false)
+ if ($ConfirmInstall -eq $false)
{
$FailedToUpgrade = $true
}
}
-
- if ($FailedToUpgrade -eq $false)
+
+ if ($FailedToUpgrade -eq $false)
{
- if ($ModsInstalled)
+ if ($ModsInstalled)
{
Write-ToLog -LogMsg ('Modifications for {0} after upgrade/install are being applied...' -f $app.Id) -LogColor 'Yellow'
& "$ModsInstalled"
}
}
-
+
Write-ToLog -LogMsg ("########## WINGET UPGRADE PROCESS FINISHED FOR APPLICATION ID '{0}' ##########" -f $app.Id) -LogColor 'Gray'
-
+
# Notify installation
- if ($FailedToUpgrade -eq $false)
+ if ($FailedToUpgrade -eq $false)
{
# Send success updated app notification
Write-ToLog -LogMsg ('{0} updated to {1} !' -f $app.Name, $app.AvailableVersion) -LogColor 'Green'
-
+
# Send Notif
$Title = $NotifLocale.local.outputs.output[3].title -f $($app.Name)
$Message = $NotifLocale.local.outputs.output[3].message -f $($app.AvailableVersion)
@@ -122,11 +122,11 @@ Function Update-App
Start-NotifTask -Title $Title -Message $Message -MessageType $MessageType -Balise $Balise -Button1Action $ReleaseNoteURL -Button1Text $Button1Text
$Script:InstallOK += 1
}
- else
+ else
{
# Send failed updated app notification
Write-ToLog -LogMsg ('{0} update failed.' -f $app.Name) -LogColor 'Red'
-
+
# Send Notif
$Title = $NotifLocale.local.outputs.output[4].title -f $($app.Name)
$Message = $NotifLocale.local.outputs.output[4].message
diff --git a/Winget-AutoUpdate/functions/Update-WAU.ps1 b/Winget-AutoUpdate/functions/Update-WAU.ps1
index 0e9d74b..62f950e 100644
--- a/Winget-AutoUpdate/functions/Update-WAU.ps1
+++ b/Winget-AutoUpdate/functions/Update-WAU.ps1
@@ -1,68 +1,68 @@
# Function to update WAU
-function Update-WAU
+function Update-WAU
{
$OnClickAction = 'https://github.com/Romanitho/Winget-AutoUpdate/releases'
$Button1Text = $NotifLocale.local.outputs.output[10].message
-
+
#Send available update notification
$Title = $NotifLocale.local.outputs.output[2].title -f 'Winget-AutoUpdate'
$Message = $NotifLocale.local.outputs.output[2].message -f $WAUCurrentVersion, $WAUAvailableVersion
$MessageType = 'info'
Start-NotifTask -Title $Title -Message $Message -MessageType $MessageType -Button1Action $OnClickAction -Button1Text $Button1Text
-
+
# Run WAU update
- try
+ try
{
# Force to create a zip file
$ZipFile = ('{0}\WAU_update.zip' -f $WorkingDir)
$null = New-Item -Path $ZipFile -ItemType File -Force
-
+
# Download the zip
Write-ToLog -LogMsg ('Downloading the GitHub Repository version {0}' -f $WAUAvailableVersion) -LogColor 'Cyan'
$null = (Invoke-RestMethod -Uri ('https://github.com/Romanitho/Winget-AutoUpdate/releases/download/v{0}/WAU.zip' -f ($WAUAvailableVersion)) -OutFile $ZipFile)
-
+
# Extract Zip File
Write-ToLog -LogMsg 'Unzipping the WAU Update package' -LogColor 'Cyan'
$location = ('{0}\WAU_update' -f $WorkingDir)
$null = (Expand-Archive -Path $ZipFile -DestinationPath $location -Force)
$null = (Get-ChildItem -Path $location -Recurse | Unblock-File -ErrorAction SilentlyContinue)
-
+
# Update scritps
Write-ToLog -LogMsg 'Updating WAU...' -LogColor 'Yellow'
$TempPath = (Resolve-Path -Path ('{0}\Winget-AutoUpdate\' -f $location) -ErrorAction SilentlyContinue)[0].Path
- if ($TempPath)
+ if ($TempPath)
{
$null = (Copy-Item -Path ('{0}\*' -f $TempPath) -Destination ('{0}\' -f $WorkingDir) -Exclude 'icons' -Recurse -Force -Confirm:$false)
}
-
+
# Remove update zip file and update temp folder
Write-ToLog -LogMsg 'Done. Cleaning temp files...' -LogColor 'Cyan'
$null = (Remove-Item -Path $ZipFile -Force -Confirm:$false -ErrorAction SilentlyContinue)
$null = (Remove-Item -Path $location -Recurse -Force -Confirm:$false -ErrorAction SilentlyContinue)
-
+
# Set new version to registry
$WAUConfig | New-ItemProperty -Name DisplayVersion -Value $WAUAvailableVersion -Force
$WAUConfig | New-ItemProperty -Name VersionMajor -Value ([version]$WAUAvailableVersion.Replace('-', '.')).Major -Force
$WAUConfig | New-ItemProperty -Name VersionMinor -Value ([version]$WAUAvailableVersion.Replace('-', '.')).Minor -Force
-
+
# Set Post Update actions to 1
$WAUConfig | New-ItemProperty -Name WAU_PostUpdateActions -Value 1 -Force
-
+
# Send success Notif
Write-ToLog -LogMsg 'WAU Update completed.' -LogColor 'Green'
$Title = $NotifLocale.local.outputs.output[3].title -f 'Winget-AutoUpdate'
$Message = $NotifLocale.local.outputs.output[3].message -f $WAUAvailableVersion
$MessageType = 'success'
Start-NotifTask -Title $Title -Message $Message -MessageType $MessageType -Button1Action $OnClickAction -Button1Text $Button1Text
-
+
# Rerun with newer version
Write-ToLog -LogMsg 'Re-run WAU'
Start-Process -FilePath powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command `"$WorkingDir\winget-upgrade.ps1`""
-
+
exit
}
- catch
+ catch
{
# Send Error Notif
$Title = $NotifLocale.local.outputs.output[4].title -f 'Winget-AutoUpdate'
diff --git a/Winget-AutoUpdate/functions/Write-ToLog.ps1 b/Winget-AutoUpdate/functions/Write-ToLog.ps1
index d1b7c21..6482edd 100644
--- a/Winget-AutoUpdate/functions/Write-ToLog.ps1
+++ b/Winget-AutoUpdate/functions/Write-ToLog.ps1
@@ -1,20 +1,22 @@
# Write to Log Function
-function Write-ToLog
+function Write-ToLog
{
# Get log
[CmdletBinding()]
param
(
- [string]$LogMsg,
- [string]$LogColor = 'White'
+ [string]
+ $LogMsg,
+ [string]
+ $LogColor = 'White'
)
-
+
$Log = ('{0} - {1}' -f (Get-Date -UFormat '%T'), $LogMsg)
-
+
#Echo log
$Log | Write-Host -ForegroundColor $LogColor
-
+
#Write log to file
$Log | Out-File -FilePath $LogFile -Append -Force -Confirm:$false
}