add Winget-Install script
parent
4890e51a69
commit
c5309ff72f
166
Gui.ps1
166
Gui.ps1
|
@ -136,16 +136,6 @@ function Get-WingetInstalledApps {
|
||||||
|
|
||||||
function Start-Installations {
|
function Start-Installations {
|
||||||
|
|
||||||
## WINGET-INSTALL PART ##
|
|
||||||
|
|
||||||
#Run Winget-Install script if box is checked
|
|
||||||
if ($AppToInstall) {
|
|
||||||
|
|
||||||
Start-PopUp "Installing applications..."
|
|
||||||
|
|
||||||
Start-Process "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -Command `"$PSScriptRoot\Winget-AutoUpdate\Winget-Install.ps1 -AppIDs $AppToInstall`"" -Wait #-Verb RunAs -> Removing admin rights for user context apps
|
|
||||||
}
|
|
||||||
|
|
||||||
## WAU PART ##
|
## WAU PART ##
|
||||||
|
|
||||||
#Download and install Winget-AutoUpdate if box is checked
|
#Download and install Winget-AutoUpdate if box is checked
|
||||||
|
@ -153,9 +143,6 @@ function Start-Installations {
|
||||||
|
|
||||||
Start-PopUp "Installing WAU..."
|
Start-PopUp "Installing WAU..."
|
||||||
|
|
||||||
#Set WAU subfolder
|
|
||||||
$WAUInstallFolder = "$PSScriptRoot\WAU"
|
|
||||||
|
|
||||||
#Configure parameters
|
#Configure parameters
|
||||||
$WAUParameters = "-Silent "
|
$WAUParameters = "-Silent "
|
||||||
if ($WAUDoNotUpdate) {
|
if ($WAUDoNotUpdate) {
|
||||||
|
@ -179,12 +166,12 @@ function Start-Installations {
|
||||||
if ($WAUUseWhiteList) {
|
if ($WAUUseWhiteList) {
|
||||||
$WAUParameters += "-UseWhiteList "
|
$WAUParameters += "-UseWhiteList "
|
||||||
if ($WAUListPath) {
|
if ($WAUListPath) {
|
||||||
Copy-Item $WAUListPath -Destination "$WAUInstallFolder\included_apps.txt" -Force -ErrorAction SilentlyContinue
|
Copy-Item $WAUListPath -Destination "$PSScriptRoot\included_apps.txt" -Force -ErrorAction SilentlyContinue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if ($WAUListPath) {
|
if ($WAUListPath) {
|
||||||
Copy-Item $WAUListPath -Destination "$WAUInstallFolder\excluded_apps.txt" -Force -ErrorAction SilentlyContinue
|
Copy-Item $WAUListPath -Destination "$PSScriptRoot\excluded_apps.txt" -Force -ErrorAction SilentlyContinue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($WAUDesktopShortcut) {
|
if ($WAUDesktopShortcut) {
|
||||||
|
@ -198,9 +185,20 @@ function Start-Installations {
|
||||||
}
|
}
|
||||||
|
|
||||||
#Install Winget-Autoupdate
|
#Install Winget-Autoupdate
|
||||||
Start-Process "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -Command `"$WAUInstallFolder\Winget-AutoUpdate-Install.ps1 $WAUParameters`"" -Wait -Verb RunAs
|
Start-Process "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -Command `"$PSScriptRoot\Winget-AutoUpdate-Install.ps1 $WAUParameters`"" -Wait -Verb RunAs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## WINGET-INSTALL PART ##
|
||||||
|
|
||||||
|
#Run Winget-Install script if box is checked
|
||||||
|
if ($AppToInstall) {
|
||||||
|
Start-PopUp "Installing applications..."
|
||||||
|
$WAUInstallPath = Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate\" -Name InstallLocation
|
||||||
|
Start-Process "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -Command `"$WAUInstallPath\Winget-Install.ps1 -AppIDs $AppToInstall`"" -Wait #-Verb RunAs -> Removing admin rights for user context apps
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
## ADMIN PART ##
|
## ADMIN PART ##
|
||||||
|
|
||||||
if ($CMTrace) {
|
if ($CMTrace) {
|
||||||
|
@ -505,6 +503,74 @@ function Start-InstallGUI {
|
||||||
|
|
||||||
### FORM ACTIONS ###
|
### FORM ACTIONS ###
|
||||||
|
|
||||||
|
##
|
||||||
|
# "Configure WAU" Tab
|
||||||
|
##
|
||||||
|
$WAUCheckBox.add_click(
|
||||||
|
{
|
||||||
|
if ($WAUCheckBox.IsChecked -eq $true) {
|
||||||
|
$WAUConfGroupBox.IsEnabled = $true
|
||||||
|
$WAUFreqGroupBox.IsEnabled = $true
|
||||||
|
$WAUWhiteBlackGroupBox.IsEnabled = $true
|
||||||
|
$WAUShortcutsGroupBox.IsEnabled = $true
|
||||||
|
}
|
||||||
|
elseif ($WAUCheckBox.IsChecked -eq $false) {
|
||||||
|
$WAUConfGroupBox.IsEnabled = $false
|
||||||
|
$WAUFreqGroupBox.IsEnabled = $false
|
||||||
|
$WAUWhiteBlackGroupBox.IsEnabled = $false
|
||||||
|
$WAUShortcutsGroupBox.IsEnabled = $false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
$WAUMoreInfoLabel.Add_PreviewMouseDown(
|
||||||
|
{
|
||||||
|
[System.Diagnostics.Process]::Start("https://github.com/Romanitho/Winget-AutoUpdate")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
$BlackRadioBut.add_click(
|
||||||
|
{
|
||||||
|
$WAULoadListButton.IsEnabled = $true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
$WhiteRadioBut.add_click(
|
||||||
|
{
|
||||||
|
$WAULoadListButton.IsEnabled = $true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
$DefaultRadioBut.add_click(
|
||||||
|
{
|
||||||
|
$WAULoadListButton.IsEnabled = $false
|
||||||
|
$WAUListFileTextBox.Clear()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
$WAULoadListButton.add_click(
|
||||||
|
{
|
||||||
|
$response = $WAUListOpenFile.ShowDialog() # $response can return OK or Cancel
|
||||||
|
if ( $response -eq 'OK' ) {
|
||||||
|
$WAUListFileTextBox.Text = $WAUListOpenFile.FileName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
$UninstallWAUButton.add_click(
|
||||||
|
{
|
||||||
|
#Uninstall WAU from registry command
|
||||||
|
$Arguments = Get-ItemPropertyValue "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate" -Name "UninstallString"
|
||||||
|
Start-Process "cmd.exe" -ArgumentList "/c $Arguments" -Wait -Verb RunAs
|
||||||
|
$WAUInstallStatus = Get-WAUInstallStatus
|
||||||
|
$WAUStatusLabel.Text = $WAUInstallStatus[0]
|
||||||
|
$WAUStatusLabel.Foreground = $WAUInstallStatus[1]
|
||||||
|
$AppsTabPage.IsEnabled = $WAUInstallStatus[2]
|
||||||
|
$UninstallWAUButton.IsEnabled = $WAUInstallStatus[2]
|
||||||
|
$AppListBox.Items.Clear()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
##
|
##
|
||||||
# "Select Apps" Tab
|
# "Select Apps" Tab
|
||||||
##
|
##
|
||||||
|
@ -600,74 +666,6 @@ function Start-InstallGUI {
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
##
|
|
||||||
# "Configure WAU" Tab
|
|
||||||
##
|
|
||||||
$WAUCheckBox.add_click(
|
|
||||||
{
|
|
||||||
if ($WAUCheckBox.IsChecked -eq $true) {
|
|
||||||
$WAUConfGroupBox.IsEnabled = $true
|
|
||||||
$WAUFreqGroupBox.IsEnabled = $true
|
|
||||||
$WAUWhiteBlackGroupBox.IsEnabled = $true
|
|
||||||
$WAUShortcutsGroupBox.IsEnabled = $true
|
|
||||||
}
|
|
||||||
elseif ($WAUCheckBox.IsChecked -eq $false) {
|
|
||||||
$WAUConfGroupBox.IsEnabled = $false
|
|
||||||
$WAUFreqGroupBox.IsEnabled = $false
|
|
||||||
$WAUWhiteBlackGroupBox.IsEnabled = $false
|
|
||||||
$WAUShortcutsGroupBox.IsEnabled = $false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
$WAUMoreInfoLabel.Add_PreviewMouseDown(
|
|
||||||
{
|
|
||||||
[System.Diagnostics.Process]::Start("https://github.com/Romanitho/Winget-AutoUpdate")
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
$BlackRadioBut.add_click(
|
|
||||||
{
|
|
||||||
$WAULoadListButton.IsEnabled = $true
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
$WhiteRadioBut.add_click(
|
|
||||||
{
|
|
||||||
$WAULoadListButton.IsEnabled = $true
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
$DefaultRadioBut.add_click(
|
|
||||||
{
|
|
||||||
$WAULoadListButton.IsEnabled = $false
|
|
||||||
$WAUListFileTextBox.Clear()
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
$WAULoadListButton.add_click(
|
|
||||||
{
|
|
||||||
$response = $WAUListOpenFile.ShowDialog() # $response can return OK or Cancel
|
|
||||||
if ( $response -eq 'OK' ) {
|
|
||||||
$WAUListFileTextBox.Text = $WAUListOpenFile.FileName
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
$UninstallWAUButton.add_click(
|
|
||||||
{
|
|
||||||
#Uninstall WAU from registry command
|
|
||||||
$Arguments = Get-ItemPropertyValue "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate" -Name "UninstallString"
|
|
||||||
Start-Process "cmd.exe" -ArgumentList "/c $Arguments" -Wait -Verb RunAs
|
|
||||||
$WAUInstallStatus = Get-WAUInstallStatus
|
|
||||||
$WAUStatusLabel.Text = $WAUInstallStatus[0]
|
|
||||||
$WAUStatusLabel.Foreground = $WAUInstallStatus[1]
|
|
||||||
$AppsTabPage.IsEnabled = $WAUInstallStatus[2]
|
|
||||||
$UninstallWAUButton.IsEnabled = $WAUInstallStatus[2]
|
|
||||||
$AppListBox.Items.Clear()
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# "Admin Tool" Tab by hitting F9 Key
|
# "Admin Tool" Tab by hitting F9 Key
|
||||||
##
|
##
|
||||||
|
|
|
@ -0,0 +1,407 @@
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Install apps with Winget through Intune or SCCM.
|
||||||
|
Can be used standalone.
|
||||||
|
|
||||||
|
.DESCRIPTION
|
||||||
|
Allow to run Winget in System Context to install your apps.
|
||||||
|
https://github.com/Romanitho/Winget-Install
|
||||||
|
|
||||||
|
.PARAMETER AppIDs
|
||||||
|
Forward Winget App ID to install. For multiple apps, separate with ",". Case sensitive.
|
||||||
|
|
||||||
|
.PARAMETER Uninstall
|
||||||
|
To uninstall app. Works with AppIDs
|
||||||
|
|
||||||
|
.PARAMETER LogPath
|
||||||
|
Used to specify logpath. Default is same folder as Winget-Autoupdate project
|
||||||
|
|
||||||
|
.PARAMETER WAUWhiteList
|
||||||
|
Adds the app to the Winget-AutoUpdate White List. More info: https://github.com/Romanitho/Winget-AutoUpdate
|
||||||
|
If '-Uninstall' is used, it removes the app from WAU White List.
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
.\winget-install.ps1 -AppIDs 7zip.7zip
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
.\winget-install.ps1 -AppIDs 7zip.7zip -Uninstall
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
.\winget-install.ps1 -AppIDs 7zip.7zip -WAUWhiteList
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
.\winget-install.ps1 -AppIDs 7zip.7zip,Notepad++.Notepad++ -LogPath "C:\temp\logs"
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
.\winget-install.ps1 -AppIDs "7zip.7zip -v 22.00", "Notepad++.Notepad++"
|
||||||
|
#>
|
||||||
|
|
||||||
|
[CmdletBinding()]
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory = $True, ParameterSetName = "AppIDs")] [String[]] $AppIDs,
|
||||||
|
[Parameter(Mandatory = $False)] [Switch] $Uninstall,
|
||||||
|
[Parameter(Mandatory = $False)] [String] $LogPath,
|
||||||
|
[Parameter(Mandatory = $False)] [Switch] $WAUWhiteList
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
<# FUNCTIONS #>
|
||||||
|
|
||||||
|
#Include external Functions
|
||||||
|
. "$PSScriptRoot\functions\Install-Prerequisites.ps1"
|
||||||
|
. "$PSScriptRoot\functions\Update-WinGet.ps1"
|
||||||
|
. "$PSScriptRoot\functions\Update-StoreApps.ps1"
|
||||||
|
. "$PSScriptRoot\functions\Add-ScopeMachine.ps1"
|
||||||
|
. "$PSScriptRoot\functions\Get-WingetCmd.ps1"
|
||||||
|
. "$PSScriptRoot\functions\Write-ToLog.ps1"
|
||||||
|
. "$PSScriptRoot\functions\Confirm-Installation.ps1"
|
||||||
|
|
||||||
|
|
||||||
|
#Check if App exists in Winget Repository
|
||||||
|
function Confirm-Exist ($AppID) {
|
||||||
|
#Check is app exists in the winget repository
|
||||||
|
$WingetApp = & $winget show --Id $AppID -e --accept-source-agreements -s winget | Out-String
|
||||||
|
|
||||||
|
#Return if AppID exists
|
||||||
|
if ($WingetApp -match [regex]::Escape($AppID)) {
|
||||||
|
Write-ToLog "-> $AppID exists on Winget Repository." "Cyan"
|
||||||
|
return $true
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-ToLog "-> $AppID does not exist on Winget Repository! Check spelling." "Red"
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#Check if install modifications exist in "mods" directory
|
||||||
|
function Test-ModsInstall ($AppID) {
|
||||||
|
if (Test-Path "$PSScriptRoot\mods\$AppID-preinstall.ps1") {
|
||||||
|
$ModsPreInstall = "$PSScriptRoot\mods\$AppID-preinstall.ps1"
|
||||||
|
}
|
||||||
|
elseif (($WAUInstallLocation) -and (Test-Path "$WAUInstallLocation\mods\$AppID-preinstall.ps1")) {
|
||||||
|
$ModsPreInstall = "$WAUInstallLocation\mods\$AppID-preinstall.ps1"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Test-Path "$PSScriptRoot\mods\$AppID-install.ps1") {
|
||||||
|
$ModsInstall = "$PSScriptRoot\mods\$AppID-install.ps1"
|
||||||
|
}
|
||||||
|
elseif (($WAUInstallLocation) -and (Test-Path "$WAUInstallLocation\mods\$AppID-install.ps1")) {
|
||||||
|
$ModsInstall = "$WAUInstallLocation\mods\$AppID-install.ps1"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Test-Path "$PSScriptRoot\mods\$AppID-installed-once.ps1") {
|
||||||
|
$ModsInstalledOnce = "$PSScriptRoot\mods\$AppID-installed-once.ps1"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Test-Path "$PSScriptRoot\mods\$AppID-installed.ps1") {
|
||||||
|
$ModsInstalled = "$PSScriptRoot\mods\$AppID-installed.ps1"
|
||||||
|
}
|
||||||
|
elseif (($WAUInstallLocation) -and (Test-Path "$WAUInstallLocation\mods\$AppID-installed.ps1")) {
|
||||||
|
$ModsInstalled = "$WAUInstallLocation\mods\$AppID-installed.ps1"
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ModsPreInstall, $ModsInstall, $ModsInstalledOnce, $ModsInstalled
|
||||||
|
}
|
||||||
|
|
||||||
|
#Check if uninstall modifications exist in "mods" directory
|
||||||
|
function Test-ModsUninstall ($AppID) {
|
||||||
|
if (Test-Path "$PSScriptRoot\mods\$AppID-preuninstall.ps1") {
|
||||||
|
$ModsPreUninstall = "$PSScriptRoot\mods\$AppID-preuninstall.ps1"
|
||||||
|
}
|
||||||
|
elseif (($WAUInstallLocation) -and (Test-Path "$WAUInstallLocation\mods\$AppID-preuninstall.ps1")) {
|
||||||
|
$ModsPreUninstall = "$WAUInstallLocation\mods\$AppID-preuninstall.ps1"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Test-Path "$PSScriptRoot\mods\$AppID-uninstall.ps1") {
|
||||||
|
$ModsUninstall = "$PSScriptRoot\mods\$AppID-uninstall.ps1"
|
||||||
|
}
|
||||||
|
elseif (($WAUInstallLocation) -and (Test-Path "$WAUInstallLocation\mods\$AppID-uninstall.ps1")) {
|
||||||
|
$ModsUninstall = "$WAUInstallLocation\mods\$AppID-uninstall.ps1"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Test-Path "$PSScriptRoot\mods\$AppID-uninstalled.ps1") {
|
||||||
|
$ModsUninstalled = "$PSScriptRoot\mods\$AppID-uninstalled.ps1"
|
||||||
|
}
|
||||||
|
elseif (($WAUInstallLocation) -and (Test-Path "$WAUInstallLocation\mods\$AppID-uninstalled.ps1")) {
|
||||||
|
$ModsUninstalled = "$WAUInstallLocation\mods\$AppID-uninstalled.ps1"
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ModsPreUninstall, $ModsUninstall, $ModsUninstalled
|
||||||
|
}
|
||||||
|
|
||||||
|
#Install function
|
||||||
|
function Install-App ($AppID, $AppArgs) {
|
||||||
|
$IsInstalled = Confirm-Installation $AppID
|
||||||
|
if (!($IsInstalled)) {
|
||||||
|
#Check if mods exist (or already exist) for preinstall/install/installedonce/installed
|
||||||
|
$ModsPreInstall, $ModsInstall, $ModsInstalledOnce, $ModsInstalled = Test-ModsInstall $($AppID)
|
||||||
|
|
||||||
|
#If PreInstall script exist
|
||||||
|
if ($ModsPreInstall) {
|
||||||
|
Write-ToLog "-> Modifications for $AppID before install are being applied..." "Yellow"
|
||||||
|
& "$ModsPreInstall"
|
||||||
|
}
|
||||||
|
|
||||||
|
#Install App
|
||||||
|
Write-ToLog "-> Installing $AppID..." "Yellow"
|
||||||
|
$WingetArgs = "install --id $AppID -e --accept-package-agreements --accept-source-agreements -s winget -h $AppArgs" -split " "
|
||||||
|
Write-ToLog "-> Running: `"$Winget`" $WingetArgs"
|
||||||
|
& "$Winget" $WingetArgs | Where-Object { $_ -notlike " *" } | Tee-Object -file $LogFile -Append
|
||||||
|
|
||||||
|
if ($ModsInstall) {
|
||||||
|
Write-ToLog "-> Modifications for $AppID during install are being applied..." "Yellow"
|
||||||
|
& "$ModsInstall"
|
||||||
|
}
|
||||||
|
|
||||||
|
#Check if install is ok
|
||||||
|
$IsInstalled = Confirm-Installation $AppID
|
||||||
|
if ($IsInstalled) {
|
||||||
|
Write-ToLog "-> $AppID successfully installed." "Green"
|
||||||
|
|
||||||
|
if ($ModsInstalledOnce) {
|
||||||
|
Write-ToLog "-> Modifications for $AppID after install (one time) are being applied..." "Yellow"
|
||||||
|
& "$ModsInstalledOnce"
|
||||||
|
}
|
||||||
|
elseif ($ModsInstalled) {
|
||||||
|
Write-ToLog "-> Modifications for $AppID after install are being applied..." "Yellow"
|
||||||
|
& "$ModsInstalled"
|
||||||
|
}
|
||||||
|
|
||||||
|
#Add mods if deployed from Winget-Install
|
||||||
|
if ((Test-Path "$PSScriptRoot\mods\$AppID-preinstall.ps1") -or (Test-Path "$PSScriptRoot\mods\$AppID-upgrade.ps1") -or (Test-Path "$PSScriptRoot\mods\$AppID-install.ps1") -or (Test-Path "$PSScriptRoot\mods\$AppID-installed.ps1")) {
|
||||||
|
Add-WAUMods $AppID
|
||||||
|
}
|
||||||
|
|
||||||
|
#Add to WAU White List if set
|
||||||
|
if ($WAUWhiteList) {
|
||||||
|
Add-WAUWhiteList $AppID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-ToLog "-> $AppID installation failed!" "Red"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-ToLog "-> $AppID is already installed." "Cyan"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#Uninstall function
|
||||||
|
function Uninstall-App ($AppID, $AppArgs) {
|
||||||
|
$IsInstalled = Confirm-Installation $AppID
|
||||||
|
if ($IsInstalled) {
|
||||||
|
#Check if mods exist (or already exist) for preuninstall/uninstall/uninstalled
|
||||||
|
$ModsPreUninstall, $ModsUninstall, $ModsUninstalled = Test-ModsUninstall $AppID
|
||||||
|
|
||||||
|
#If PreUninstall script exist
|
||||||
|
if ($ModsPreUninstall) {
|
||||||
|
Write-ToLog "-> Modifications for $AppID before uninstall are being applied..." "Yellow"
|
||||||
|
& "$ModsPreUninstall"
|
||||||
|
}
|
||||||
|
|
||||||
|
#Uninstall App
|
||||||
|
Write-ToLog "-> Uninstalling $AppID..." "Yellow"
|
||||||
|
$WingetArgs = "uninstall --id $AppID -e --accept-source-agreements -h" -split " "
|
||||||
|
Write-ToLog "-> Running: `"$Winget`" $WingetArgs"
|
||||||
|
& "$Winget" $WingetArgs | Where-Object { $_ -notlike " *" } | Tee-Object -file $LogFile -Append
|
||||||
|
|
||||||
|
if ($ModsUninstall) {
|
||||||
|
Write-ToLog "-> Modifications for $AppID during uninstall are being applied..." "Yellow"
|
||||||
|
& "$ModsUninstall"
|
||||||
|
}
|
||||||
|
|
||||||
|
#Check if uninstall is ok
|
||||||
|
$IsInstalled = Confirm-Installation $AppID
|
||||||
|
if (!($IsInstalled)) {
|
||||||
|
Write-ToLog "-> $AppID successfully uninstalled." "Green"
|
||||||
|
if ($ModsUninstalled) {
|
||||||
|
Write-ToLog "-> Modifications for $AppID after uninstall are being applied..." "Yellow"
|
||||||
|
& "$ModsUninstalled"
|
||||||
|
}
|
||||||
|
|
||||||
|
#Remove mods if deployed from Winget-Install
|
||||||
|
if ((Test-Path "$PSScriptRoot\mods\$AppID-preinstall.ps1") -or (Test-Path "$PSScriptRoot\mods\$AppID-upgrade.ps1") -or (Test-Path "$PSScriptRoot\mods\$AppID-install.ps1") -or (Test-Path "$PSScriptRoot\mods\$AppID-installed.ps1")) {
|
||||||
|
Remove-WAUMods $AppID
|
||||||
|
}
|
||||||
|
|
||||||
|
#Remove from WAU White List if set
|
||||||
|
if ($WAUWhiteList) {
|
||||||
|
Remove-WAUWhiteList $AppID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-ToLog "-> $AppID uninstall failed!" "Red"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-ToLog "-> $AppID is not installed." "Cyan"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#Function to Add app to WAU white list
|
||||||
|
function Add-WAUWhiteList ($AppID) {
|
||||||
|
#Check if WAU default intall path exists
|
||||||
|
$WhiteList = "$WAUInstallLocation\included_apps.txt"
|
||||||
|
if (Test-Path $WhiteList) {
|
||||||
|
Write-ToLog "-> Add $AppID to WAU included_apps.txt"
|
||||||
|
#Add App to "included_apps.txt"
|
||||||
|
Add-Content -path $WhiteList -Value "`n$AppID" -Force
|
||||||
|
#Remove duplicate and blank lines
|
||||||
|
$file = Get-Content $WhiteList | Select-Object -Unique | Where-Object { $_.trim() -ne "" } | Sort-Object
|
||||||
|
$file | Out-File $WhiteList
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#Function to Remove app from WAU white list
|
||||||
|
function Remove-WAUWhiteList ($AppID) {
|
||||||
|
#Check if WAU default intall path exists
|
||||||
|
$WhiteList = "$WAUInstallLocation\included_apps.txt"
|
||||||
|
if (Test-Path $WhiteList) {
|
||||||
|
Write-ToLog "-> Remove $AppID from WAU included_apps.txt"
|
||||||
|
#Remove app from list
|
||||||
|
$file = Get-Content $WhiteList | Where-Object { $_ -ne "$AppID" }
|
||||||
|
$file | Out-File $WhiteList
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#Function to Add Mods to WAU "mods"
|
||||||
|
function Add-WAUMods ($AppID) {
|
||||||
|
#Check if WAU default install path exists
|
||||||
|
$Mods = "$WAUInstallLocation\mods"
|
||||||
|
if (Test-Path $Mods) {
|
||||||
|
#Add mods
|
||||||
|
Write-ToLog "-> Add modifications for $AppID to WAU 'mods'"
|
||||||
|
Copy-Item "$PSScriptRoot\mods\$AppID-*" -Destination "$Mods" -Exclude "*installed-once*", "*uninstall*" -Force
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#Function to Remove Mods from WAU "mods"
|
||||||
|
function Remove-WAUMods ($AppID) {
|
||||||
|
#Check if WAU default install path exists
|
||||||
|
$Mods = "$WAUInstallLocation\mods"
|
||||||
|
if (Test-Path "$Mods\$AppID*") {
|
||||||
|
Write-ToLog "-> Remove $AppID modifications from WAU 'mods'"
|
||||||
|
#Remove mods
|
||||||
|
Remove-Item -Path "$Mods\$AppID-*" -Exclude "*uninstall*" -Force
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
<# 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 (Test-Path "$($env:WINDIR)\SysNative\WindowsPowerShell\v1.0\powershell.exe") {
|
||||||
|
Start-Process "$($env:WINDIR)\SysNative\WindowsPowerShell\v1.0\powershell.exe" -Wait -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command $($MyInvocation.line)"
|
||||||
|
Exit $lastexitcode
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#Config console output encoding
|
||||||
|
$null = cmd /c '' #Tip for ISE
|
||||||
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
||||||
|
$Script:ProgressPreference = 'SilentlyContinue'
|
||||||
|
|
||||||
|
#Check if current process is elevated (System or admin user)
|
||||||
|
$CurrentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
|
||||||
|
$Script:IsElevated = $CurrentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
|
||||||
|
|
||||||
|
#Get WAU Installed location
|
||||||
|
$WAURegKey = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winget-AutoUpdate\"
|
||||||
|
$Script:WAUInstallLocation = Get-ItemProperty $WAURegKey -ErrorAction SilentlyContinue | Select-Object -ExpandProperty InstallLocation
|
||||||
|
|
||||||
|
#LogPath initialisation
|
||||||
|
if (!($LogPath)) {
|
||||||
|
#If LogPath is not set, get WAU log path
|
||||||
|
if ($WAUInstallLocation) {
|
||||||
|
$LogPath = "$WAUInstallLocation\Logs"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
#Else, set a default one
|
||||||
|
$LogPath = "$env:ProgramData\Winget-AutoUpdate\Logs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#Logs initialisation
|
||||||
|
if (!(Test-Path $LogPath)) {
|
||||||
|
New-Item -ItemType Directory -Force -Path $LogPath | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
#Log file
|
||||||
|
if ($IsElevated) {
|
||||||
|
$Script:LogFile = "$LogPath\install.log"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$Script:LogFile = "$LogPath\install_$env:UserName.log"
|
||||||
|
}
|
||||||
|
|
||||||
|
#Header (not logged)
|
||||||
|
Write-Host "`n "
|
||||||
|
Write-Host "`t 888 888 d8888 888 888" -ForegroundColor Magenta
|
||||||
|
Write-Host "`t 888 o 888 d88888 888 888" -ForegroundColor Magenta
|
||||||
|
Write-Host "`t 888 d8b 888 d88P888 888 888" -ForegroundColor Magenta
|
||||||
|
Write-Host "`t 888 d888b 888 d88P 888 888 888" -ForegroundColor Magenta
|
||||||
|
Write-Host "`t 888d88888b888 d88P 888 888 888" -ForegroundColor Magenta
|
||||||
|
Write-Host "`t 88888P Y88888 d88P 888 888 888" -ForegroundColor Cyan
|
||||||
|
Write-Host "`t 8888P Y8888 d88P 888 888 888" -ForegroundColor Magenta
|
||||||
|
Write-Host "`t 888P Y888 d88P 888 Y8888888P`n" -ForegroundColor Magenta
|
||||||
|
Write-Host "`t Winget-AutoUpdate`n" -ForegroundColor Cyan
|
||||||
|
Write-Host "`t https://github.com/Romanitho/Winget-AutoUpdate`n" -ForegroundColor Magenta
|
||||||
|
Write-Host "`t________________________________________________________`n`n"
|
||||||
|
|
||||||
|
#Log Header
|
||||||
|
if ($Uninstall) {
|
||||||
|
Write-ToLog -LogMsg "NEW UNINSTALL REQUEST" -LogColor "Magenta" -IsHeader
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-ToLog -LogMsg "NEW INSTALL REQUEST" -LogColor "Magenta" -IsHeader
|
||||||
|
}
|
||||||
|
|
||||||
|
#Get Winget command
|
||||||
|
$Script:Winget = Get-WingetCmd
|
||||||
|
|
||||||
|
if ($IsElevated -eq $True) {
|
||||||
|
Write-ToLog "Running with admin rights.`n "
|
||||||
|
#Check/install prerequisites
|
||||||
|
Install-Prerequisites
|
||||||
|
#Install/Update Winget
|
||||||
|
Update-Winget
|
||||||
|
#Reload Winget command
|
||||||
|
$Script:Winget = Get-WingetCmd
|
||||||
|
#Run Scope Machine funtion
|
||||||
|
Add-ScopeMachine
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-ToLog "Running without admin rights.`n "
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($Winget) {
|
||||||
|
#Run install or uninstall for all apps
|
||||||
|
foreach ($App_Full in $AppIDs) {
|
||||||
|
#Split AppID and Custom arguments
|
||||||
|
$AppID, $AppArgs = ($App_Full.Trim().Split(" ", 2))
|
||||||
|
|
||||||
|
#Log current App
|
||||||
|
Write-ToLog "Start $AppID processing..." "Blue"
|
||||||
|
|
||||||
|
#Install or Uninstall command
|
||||||
|
if ($Uninstall) {
|
||||||
|
Uninstall-App $AppID $AppArgs
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
#Check if app exists on Winget Repo
|
||||||
|
$Exists = Confirm-Exist $AppID
|
||||||
|
if ($Exists) {
|
||||||
|
#Install
|
||||||
|
Install-App $AppID $AppArgs
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#Log current App
|
||||||
|
Write-ToLog "$AppID processing finished!`n" "Blue"
|
||||||
|
Start-Sleep 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-ToLog "### END REQUEST ###`n" "Magenta"
|
||||||
|
Start-Sleep 3
|
|
@ -1,7 +1,7 @@
|
||||||
Function Confirm-Installation ($AppName, $AppVer){
|
Function Confirm-Installation ($AppName, $AppVer) {
|
||||||
|
|
||||||
#Set json export file
|
#Set json export file
|
||||||
$JsonFile = "$WorkingDir\InstalledApps.json"
|
$JsonFile = "$env:TEMP\InstalledApps.json"
|
||||||
|
|
||||||
#Get installed apps and version in json file
|
#Get installed apps and version in json file
|
||||||
& $Winget export -s winget -o $JsonFile --include-versions | Out-Null
|
& $Winget export -s winget -o $JsonFile --include-versions | Out-Null
|
||||||
|
@ -16,12 +16,12 @@ Function Confirm-Installation ($AppName, $AppVer){
|
||||||
Remove-Item $JsonFile -Force
|
Remove-Item $JsonFile -Force
|
||||||
|
|
||||||
# Search for specific app and version
|
# Search for specific app and version
|
||||||
$Apps = $Packages | Where-Object { $_.PackageIdentifier -eq $AppName -and $_.Version -like "$AppVer*"}
|
$Apps = $Packages | Where-Object { $_.PackageIdentifier -eq $AppName -and $_.Version -like "$AppVer*" }
|
||||||
|
|
||||||
if ($Apps){
|
if ($Apps) {
|
||||||
return $true
|
return $true
|
||||||
}
|
}
|
||||||
else{
|
else {
|
||||||
return $false
|
return $false
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue