add Winget-Install script
parent
4890e51a69
commit
c5309ff72f
166
Gui.ps1
166
Gui.ps1
|
@ -136,16 +136,6 @@ function Get-WingetInstalledApps {
|
|||
|
||||
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 ##
|
||||
|
||||
#Download and install Winget-AutoUpdate if box is checked
|
||||
|
@ -153,9 +143,6 @@ function Start-Installations {
|
|||
|
||||
Start-PopUp "Installing WAU..."
|
||||
|
||||
#Set WAU subfolder
|
||||
$WAUInstallFolder = "$PSScriptRoot\WAU"
|
||||
|
||||
#Configure parameters
|
||||
$WAUParameters = "-Silent "
|
||||
if ($WAUDoNotUpdate) {
|
||||
|
@ -179,12 +166,12 @@ function Start-Installations {
|
|||
if ($WAUUseWhiteList) {
|
||||
$WAUParameters += "-UseWhiteList "
|
||||
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 {
|
||||
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) {
|
||||
|
@ -198,9 +185,20 @@ function Start-Installations {
|
|||
}
|
||||
|
||||
#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 ##
|
||||
|
||||
if ($CMTrace) {
|
||||
|
@ -505,6 +503,74 @@ function Start-InstallGUI {
|
|||
|
||||
### 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
|
||||
##
|
||||
|
@ -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
|
||||
##
|
||||
|
|
|
@ -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
|
||||
$JsonFile = "$WorkingDir\InstalledApps.json"
|
||||
$JsonFile = "$env:TEMP\InstalledApps.json"
|
||||
|
||||
#Get installed apps and version in json file
|
||||
& $Winget export -s winget -o $JsonFile --include-versions | Out-Null
|
||||
|
@ -16,12 +16,12 @@ Function Confirm-Installation ($AppName, $AppVer){
|
|||
Remove-Item $JsonFile -Force
|
||||
|
||||
# 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
|
||||
}
|
||||
else{
|
||||
else {
|
||||
return $false
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue