-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUpdate-WinGetApps.ps1
84 lines (73 loc) · 2.15 KB
/
Update-WinGetApps.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<#
.SYNOPSIS
Updates apps using winget.
.DESCRIPTION
Updates apps using winget.
.INPUTS
Exclusion file.
.OUTPUTS
None.
.EXAMPLE
PS> .\Update-WinGetApps -ExclusionFilePath "exclusion.txt"
#>
# ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#Requires -Version 5.0
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')]
param ( [Parameter()] [string] $ExclusionFile
)
DynamicParam { Build-BaseParameters }
Begin
{
Write-LogTrace "Execute: $(Get-RootScriptName)"
$minParams = Get-MinimumRequiredParameterCount -CommandInfo (Get-Command $MyInvocation.MyCommand.Name)
$cmd = @{}
if(Get-BaseParamHelpFull) { $cmd.HelpFull = $true }
if((Get-BaseParamHelpDetail) -Or ($PSBoundParameters.Count -lt $minParams)) { $cmd.HelpDetail = $true }
if(Get-BaseParamHelpSynopsis) { $cmd.HelpSynopsis = $true }
if($cmd.Count -gt 1) { Write-DisplayHelp -Name "$(Get-RootScriptPath)" -HelpDetail }
if($cmd.Count -eq 1) { Write-DisplayHelp -Name "$(Get-RootScriptPath)" @cmd }
}
Process
{
try
{
$isDebug = Assert-Debug
$exclusionPatterns = @()
if($ExclusionFile)
{
$exclusionPatterns = Get-Content $ExclusionFile | Where-Object { $_ -ne "" }
}
$updatableApps = winget upgrade --query | Select-String -Pattern '^\s*[^ ]+\s+' -AllMatches | ForEach-Object { $_.Matches[0].Value.Trim() }
$appsToUpdate = $updatableApps | Where-Object
{
$app = $_
$excluded = $false
foreach ($pattern in $exclusionPatterns)
{
if ($app -like $pattern)
{
$excluded = $true
break
}
}
-not $excluded
}
foreach ($app in $appsToUpdate)
{
Write-Host "Updating $app..."
if ($PSCmdlet.ShouldProcess($app, 'WinGet upgrade.'))
{
winget upgrade $app
}
}
}
catch [System.Exception]
{
Write-DisplayError $PSItem.ToString() -Exit
}
}
End
{
Write-DisplayHost "Done." -Style Done
}
# ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------