mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2024-12-22 14:01:31 -06:00
add store appx gui
This commit is contained in:
parent
0ec1b76095
commit
c6cdf77312
2
W10_11StoreApps.bat
Normal file
2
W10_11StoreApps.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@echo off
|
||||||
|
powershell -noprofile -executionpolicy bypass -file W10_11StoreApps.ps1
|
448
W10_11StoreApps.ps1
Normal file
448
W10_11StoreApps.ps1
Normal file
@ -0,0 +1,448 @@
|
|||||||
|
$PackageList = ConvertFrom-Csv @'
|
||||||
|
Identity, Family
|
||||||
|
Clipchamp.Clipchamp, Clipchamp.Clipchamp_yxz26nhyzhsrt
|
||||||
|
Microsoft.AV1VideoExtension, Microsoft.AV1VideoExtension_8wekyb3d8bbwe
|
||||||
|
Microsoft.BingNews, Microsoft.BingNews_8wekyb3d8bbwe
|
||||||
|
Microsoft.BingWeather, Microsoft.BingWeather_8wekyb3d8bbwe
|
||||||
|
Microsoft.Cortana, Microsoft.549981C3F5F10_8wekyb3d8bbwe
|
||||||
|
Microsoft.DesktopAppInstaller, Microsoft.DesktopAppInstaller_8wekyb3d8bbwe
|
||||||
|
Microsoft.GamingApp, Microsoft.GamingApp_8wekyb3d8bbwe
|
||||||
|
Microsoft.GamingServices, Microsoft.GamingServices_8wekyb3d8bbwe
|
||||||
|
Microsoft.GetHelp, Microsoft.GetHelp_8wekyb3d8bbwe
|
||||||
|
Microsoft.Getstarted, Microsoft.Getstarted_8wekyb3d8bbwe
|
||||||
|
Microsoft.HEIFImageExtension, Microsoft.HEIFImageExtension_8wekyb3d8bbwe
|
||||||
|
Microsoft.HEVCVideoExtension, Microsoft.HEVCVideoExtension_8wekyb3d8bbwe
|
||||||
|
Microsoft.Microsoft3DViewer, Microsoft.Microsoft3DViewer_8wekyb3d8bbwe
|
||||||
|
Microsoft.MicrosoftFamily, MicrosoftCorporationII.MicrosoftFamily_8wekyb3d8bbwe
|
||||||
|
Microsoft.MicrosoftHoloLens, Microsoft.MicrosoftHoloLens_8wekyb3d8bbwe
|
||||||
|
Microsoft.MicrosoftJournal, Microsoft.MicrosoftJournal_8wekyb3d8bbwe
|
||||||
|
Microsoft.MicrosoftOfficeHub, Microsoft.MicrosoftOfficeHub_8wekyb3d8bbwe
|
||||||
|
Microsoft.MicrosoftOneDrive, Microsoft.MicrosoftSkyDrive_8wekyb3d8bbwe
|
||||||
|
Microsoft.MicrosoftSolitaireCollection, Microsoft.MicrosoftSolitaireCollection_8wekyb3d8bbwe
|
||||||
|
Microsoft.MicrosoftStickyNotes, Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe
|
||||||
|
Microsoft.MixedReality.Portal, Microsoft.MixedReality.Portal_8wekyb3d8bbwe
|
||||||
|
Microsoft.MPEG2VideoExtension, Microsoft.MPEG2VideoExtension_8wekyb3d8bbwe
|
||||||
|
Microsoft.MSPaint, Microsoft.MSPaint_8wekyb3d8bbwe
|
||||||
|
Microsoft.Office.Excel, Microsoft.Office.Excel_8wekyb3d8bbwe
|
||||||
|
Microsoft.Office.OneNote, Microsoft.Office.OneNote_8wekyb3d8bbwe
|
||||||
|
Microsoft.Office.PowerPoint, Microsoft.Office.PowerPoint_8wekyb3d8bbwe
|
||||||
|
Microsoft.Office.Word, Microsoft.Office.Word_8wekyb3d8bbwe
|
||||||
|
Microsoft.Paint, Microsoft.Paint_8wekyb3d8bbwe
|
||||||
|
Microsoft.People, Microsoft.People_8wekyb3d8bbwe
|
||||||
|
Microsoft.PowerAutomateDesktop, Microsoft.PowerAutomateDesktop_8wekyb3d8bbwe
|
||||||
|
Microsoft.PowerShell, Microsoft.PowerShell_8wekyb3d8bbwe
|
||||||
|
Microsoft.QuickAssist, MicrosoftCorporationII.QuickAssist_8wekyb3d8bbwe
|
||||||
|
Microsoft.RawImageExtension, Microsoft.RawImageExtension_8wekyb3d8bbwe
|
||||||
|
Microsoft.RemoteDesktop, Microsoft.RemoteDesktop_8wekyb3d8bbwe
|
||||||
|
Microsoft.ScreenSketch, Microsoft.ScreenSketch_8wekyb3d8bbwe
|
||||||
|
Microsoft.Services.Store.Engagement, Microsoft.Services.Store.Engagement_8wekyb3d8bbwe
|
||||||
|
Microsoft.SkypeApp, Microsoft.SkypeApp_kzf8qxf38zg5c
|
||||||
|
Microsoft.StorePurchaseApp, Microsoft.StorePurchaseApp_8wekyb3d8bbwe
|
||||||
|
Microsoft.SysinternalsSuite, Microsoft.SysinternalsSuite_8wekyb3d8bbwe
|
||||||
|
Microsoft.Todos, Microsoft.Todos_8wekyb3d8bbwe
|
||||||
|
Microsoft.VP9VideoExtensions, Microsoft.VP9VideoExtensions_8wekyb3d8bbwe
|
||||||
|
Microsoft.WebMediaExtensions, Microsoft.WebMediaExtensions_8wekyb3d8bbwe
|
||||||
|
Microsoft.WebpImageExtension, Microsoft.WebpImageExtension_8wekyb3d8bbwe
|
||||||
|
Microsoft.Whiteboard, Microsoft.Whiteboard_8wekyb3d8bbwe
|
||||||
|
Microsoft.WindowsAlarms, Microsoft.WindowsAlarms_8wekyb3d8bbwe
|
||||||
|
Microsoft.WindowsCalculator, Microsoft.WindowsCalculator_8wekyb3d8bbwe
|
||||||
|
Microsoft.WindowsCamera, Microsoft.WindowsCamera_8wekyb3d8bbwe
|
||||||
|
MicrosoftWindows.Client.WebExperience, MicrosoftWindows.Client.WebExperience_cw5n1h2txyewy
|
||||||
|
Microsoft.WindowsCommunicationsApps, Microsoft.WindowsCommunicationsApps_8wekyb3d8bbwe
|
||||||
|
Microsoft.WindowsDefenderApplicationGuard, Microsoft.WindowsDefenderApplicationGuard_8wekyb3d8bbwe
|
||||||
|
Microsoft.WindowsFeedbackHub, Microsoft.WindowsFeedbackHub_8wekyb3d8bbwe
|
||||||
|
Microsoft.WindowsMaps, Microsoft.WindowsMaps_8wekyb3d8bbwe
|
||||||
|
Microsoft.WindowsNotepad, Microsoft.WindowsNotepad_8wekyb3d8bbwe
|
||||||
|
Microsoft.Windows.Photos, Microsoft.Windows.Photos_8wekyb3d8bbwe
|
||||||
|
Microsoft.WindowsScan, Microsoft.WindowsScan_8wekyb3d8bbwe
|
||||||
|
Microsoft.WindowsSoundRecorder, Microsoft.WindowsSoundRecorder_8wekyb3d8bbwe
|
||||||
|
Microsoft.WindowsStore, Microsoft.WindowsStore_8wekyb3d8bbwe
|
||||||
|
Microsoft.WindowsSubsystemForAndroid, MicrosoftCorporationII.WindowsSubsystemForAndroid_8wekyb3d8bbwe
|
||||||
|
Microsoft.WindowsSubsystemforLinux, MicrosoftCorporationII.WindowsSubsystemforLinux_8wekyb3d8bbwe
|
||||||
|
Microsoft.WindowsTerminal, Microsoft.WindowsTerminal_8wekyb3d8bbwe
|
||||||
|
Microsoft.XboxApp, Microsoft.XboxApp_8wekyb3d8bbwe
|
||||||
|
Microsoft.XboxDevices, Microsoft.XboxDevices_8wekyb3d8bbwe
|
||||||
|
Microsoft.XboxGameOverlay, Microsoft.XboxGameOverlay_8wekyb3d8bbwe
|
||||||
|
Microsoft.XboxGamingOverlay, Microsoft.XboxGamingOverlay_8wekyb3d8bbwe
|
||||||
|
Microsoft.XboxIdentityProvider, Microsoft.XboxIdentityProvider_8wekyb3d8bbwe
|
||||||
|
Microsoft.XboxSpeechToTextOverlay, Microsoft.XboxSpeechToTextOverlay_8wekyb3d8bbwe
|
||||||
|
Microsoft.Xbox.TCUI, Microsoft.Xbox.TCUI_8wekyb3d8bbwe
|
||||||
|
Microsoft.YourPhone, Microsoft.YourPhone_8wekyb3d8bbwe
|
||||||
|
Microsoft.ZuneMusic, Microsoft.ZuneMusic_8wekyb3d8bbwe
|
||||||
|
Microsoft.ZuneVideo, Microsoft.ZuneVideo_8wekyb3d8bbwe
|
||||||
|
Amazon.AmazonAppstore, Amazon.comServicesLLC.AmazonAppstore_bvztej1py64t8
|
||||||
|
AMD.AMDRadeonSoftware, AdvancedMicroDevicesInc-2.AMDRadeonSoftware_0a9344xs7nr4m
|
||||||
|
Apple.iCloud, AppleInc.iCloud_nzyj5cx40ttqa
|
||||||
|
Apple.iTunes, AppleInc.iTunes_nzyj5cx40ttqa
|
||||||
|
Canonical.Ubuntu, CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc
|
||||||
|
Canonical.Ubuntu18.04, CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc
|
||||||
|
Canonical.Ubuntu20.04LTS, CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc
|
||||||
|
Debian.DebianGNULinux, TheDebianProject.DebianGNULinux_76v4gfsz19hv4
|
||||||
|
Intel.IntelGraphicsExperience, AppUp.IntelGraphicsExperience_8j3eq9eme6ctt
|
||||||
|
Mozilla.Firefox, Mozilla.Firefox_n80bbvh6b1yt2
|
||||||
|
NVIDIA.NVIDIAControlPanel, NVIDIACorp.NVIDIAControlPanel_56jybvy8sckqj
|
||||||
|
'@
|
||||||
|
|
||||||
|
$DependencyList = [ordered]@{
|
||||||
|
'Microsoft.Advertising.Xaml' = $null
|
||||||
|
'Microsoft.NET.Native.Framework' = $null
|
||||||
|
'Microsoft.NET.Native.Runtime' = $null
|
||||||
|
'Microsoft.Services.Store.Engagement' = $null
|
||||||
|
'Microsoft.UI.Xaml' = $null
|
||||||
|
'UWPDesktop'= $null
|
||||||
|
'Microsoft.VCLibs' = $null
|
||||||
|
'Microsoft.WinJS' = $null
|
||||||
|
}
|
||||||
|
|
||||||
|
$RingList = ConvertFrom-Csv @'
|
||||||
|
Name, Value
|
||||||
|
Fast, WIF
|
||||||
|
Slow, WIS
|
||||||
|
Preview, RP
|
||||||
|
Retail, Retail
|
||||||
|
'@
|
||||||
|
|
||||||
|
############
|
||||||
|
|
||||||
|
$CurrentUser = New-Object Security.Principal.WindowsPrincipal ([Security.Principal.WindowsIdentity]::GetCurrent())
|
||||||
|
$Elevated = $CurrentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
|
||||||
|
|
||||||
|
$CheckListBox= {
|
||||||
|
if (($Package_ListBox.SelectedIndex -gt -1 -or $ProductID_TextBox.Text -ne $null) -and $Arch_ListBox.SelectedIndex -gt -1 -and $Ring_ListBox.SelectedIndex -gt -1) {
|
||||||
|
$OKButton.Enabled = $true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
|
||||||
|
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
|
||||||
|
|
||||||
|
$objForm = New-Object System.Windows.Forms.Form
|
||||||
|
$objForm.Text = 'Microsoft Store Apps v1.02'
|
||||||
|
$objForm.Size = New-Object System.Drawing.Size(600,465)
|
||||||
|
$objForm.StartPosition = 'CenterScreen'
|
||||||
|
|
||||||
|
$Package_Label = New-Object System.Windows.Forms.Label
|
||||||
|
$Package_Label.Location = New-Object System.Drawing.Point(25,10)
|
||||||
|
$Package_Label.Size = New-Object System.Drawing.Size(365,20)
|
||||||
|
$Package_Label.Font = [System.Drawing.Font]::new($Package_Label.Font.Name, $Package_Label.Font.Size, [System.Drawing.FontStyle]::Bold)
|
||||||
|
$Package_Label.Text = 'Package'
|
||||||
|
|
||||||
|
$objForm.Controls.Add($Package_Label)
|
||||||
|
|
||||||
|
$Package_ListBox = New-Object System.Windows.Forms.ListBox
|
||||||
|
$Package_ListBox.Location = New-Object System.Drawing.Point(25,35)
|
||||||
|
$Package_ListBox.Size = New-Object System.Drawing.Size(365,20)
|
||||||
|
$Package_ListBox.Height = 220
|
||||||
|
$Package_ListBox.add_SelectedIndexChanged({$ProductID_TextBox.Clear(); $CheckListBox})
|
||||||
|
|
||||||
|
Foreach ($item in $PackageList.Identity) {
|
||||||
|
[void]$Package_ListBox.Items.Add($item)
|
||||||
|
}
|
||||||
|
$objForm.Controls.Add($Package_ListBox)
|
||||||
|
|
||||||
|
$ProductID_Label = New-Object System.Windows.Forms.Label
|
||||||
|
$ProductID_Label.Location = New-Object System.Drawing.Point(25,255)
|
||||||
|
$ProductID_Label.Size = New-Object System.Drawing.Size(125,20)
|
||||||
|
$ProductID_Label.Font = [System.Drawing.Font]::new($ProductID_Label.Font.Name, $ProductID_Label.Font.Size, [System.Drawing.FontStyle]::Bold)
|
||||||
|
$ProductID_Label.Text = 'App Product ID'
|
||||||
|
|
||||||
|
$objForm.Controls.Add($ProductID_Label)
|
||||||
|
|
||||||
|
$ProductID_TextBox = New-Object System.Windows.Forms.TextBox
|
||||||
|
$ProductID_TextBox.Location = New-Object System.Drawing.Point(160,251)
|
||||||
|
$ProductID_TextBox.Size = New-Object System.Drawing.Size(155,20)
|
||||||
|
$ProductID_TextBox.Add_TextChanged({$Package_ListBox.ClearSelected()})
|
||||||
|
|
||||||
|
$objForm.Controls.Add($ProductID_TextBox)
|
||||||
|
|
||||||
|
$Arch_Label = New-Object System.Windows.Forms.Label
|
||||||
|
$Arch_Label.Location = New-Object System.Drawing.Point(410,10)
|
||||||
|
$Arch_Label.Size = New-Object System.Drawing.Size(65,20)
|
||||||
|
$Arch_Label.Font = [System.Drawing.Font]::new($Arch_Label.Font.Name, $Arch_Label.Font.Size, [System.Drawing.FontStyle]::Bold)
|
||||||
|
$Arch_Label.Text = 'Arch'
|
||||||
|
|
||||||
|
$objForm.Controls.Add($Arch_Label)
|
||||||
|
|
||||||
|
$Arch_ListBox = New-Object System.Windows.Forms.ListBox
|
||||||
|
$Arch_ListBox.Location = New-Object System.Drawing.Point(410,35)
|
||||||
|
$Arch_ListBox.Size = New-Object System.Drawing.Size(65,20)
|
||||||
|
$Arch_ListBox.Height = 90
|
||||||
|
$Arch_ListBox.add_SelectedIndexChanged($CheckListBox)
|
||||||
|
|
||||||
|
[void]$Arch_ListBox.Items.AddRange(@('x64','x86','arm64','arm'))
|
||||||
|
$objForm.Controls.Add($Arch_ListBox)
|
||||||
|
|
||||||
|
$Ring_Label = New-Object System.Windows.Forms.Label
|
||||||
|
$Ring_Label.Location = New-Object System.Drawing.Point(495,10)
|
||||||
|
$Ring_Label.Size = New-Object System.Drawing.Size(70,20)
|
||||||
|
$Ring_Label.Font = [System.Drawing.Font]::new($Ring_Label.Font.Name, $Ring_Label.Font.Size, [System.Drawing.FontStyle]::Bold)
|
||||||
|
$Ring_Label.Text = 'Ring'
|
||||||
|
|
||||||
|
$objForm.Controls.Add($Ring_Label)
|
||||||
|
|
||||||
|
$Ring_ListBox = New-Object System.Windows.Forms.ListBox
|
||||||
|
$Ring_ListBox.Location = New-Object System.Drawing.Point(495,35)
|
||||||
|
$Ring_ListBox.Size = New-Object System.Drawing.Size(70,20)
|
||||||
|
$Ring_ListBox.Height = 90
|
||||||
|
$Ring_ListBox.add_SelectedIndexChanged($CheckListBox)
|
||||||
|
|
||||||
|
Foreach ($item in $RingList.Name) {
|
||||||
|
[void]$Ring_ListBox.Items.Add($item)
|
||||||
|
}
|
||||||
|
$Ring_ListBox.SetSelected(3,$true)
|
||||||
|
|
||||||
|
$objForm.Controls.Add($Ring_ListBox)
|
||||||
|
|
||||||
|
$PreReq_Checkbox = New-Object System.Windows.Forms.Checkbox
|
||||||
|
$PreReq_Checkbox.Location = New-Object System.Drawing.Point(25,295)
|
||||||
|
$PreReq_Checkbox.Size = New-Object System.Drawing.Size(215,25)
|
||||||
|
$PreReq_Checkbox.Text = 'Download Dependencies'
|
||||||
|
$PreReq_Checkbox.Checked = $true
|
||||||
|
|
||||||
|
$objForm.Controls.Add($PreReq_Checkbox)
|
||||||
|
|
||||||
|
$ShowAll_Checkbox = New-Object System.Windows.Forms.Checkbox
|
||||||
|
$ShowAll_Checkbox.Location = New-Object System.Drawing.Point(25,325)
|
||||||
|
$ShowAll_Checkbox.Size = New-Object System.Drawing.Size(215,25)
|
||||||
|
$ShowAll_Checkbox.Text = 'Show All Versions'
|
||||||
|
$ShowAll_Checkbox.Checked = $false
|
||||||
|
|
||||||
|
$objForm.Controls.Add($ShowAll_Checkbox)
|
||||||
|
|
||||||
|
if ($Elevated -eq $true) {
|
||||||
|
$Sideload_Checkbox = New-Object System.Windows.Forms.Checkbox
|
||||||
|
$Sideload_Checkbox.Location = New-Object System.Drawing.Point(305,295)
|
||||||
|
$Sideload_Checkbox.Size = New-Object System.Drawing.Size(365,25)
|
||||||
|
$Sideload_Checkbox.Text = 'Install Packages'
|
||||||
|
$Sideload_Checkbox.Checked = $false
|
||||||
|
|
||||||
|
$objForm.Controls.Add($Sideload_Checkbox)
|
||||||
|
}
|
||||||
|
|
||||||
|
$FormGraphics = $objForm.CreateGraphics()
|
||||||
|
$Pen = New-Object Drawing.Pen Black
|
||||||
|
#$objForm.Add_Paint({$FormGraphics.DrawLine($Pen,300,0,300,465)})
|
||||||
|
#$objForm.Add_Paint({$FormGraphics.DrawLine($Pen,301,0,301,465)})
|
||||||
|
|
||||||
|
$OKButton = New-Object System.Windows.Forms.Button
|
||||||
|
$OKButton.Location = New-Object System.Drawing.Point(222,367)
|
||||||
|
$OKButton.Size = New-Object System.Drawing.Size(75,30)
|
||||||
|
$OKButton.Text = 'OK'
|
||||||
|
$OKButton.Add_Click({$OKButton.Enabled = $false})
|
||||||
|
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
|
||||||
|
|
||||||
|
$objForm.Controls.Add($OKButton)
|
||||||
|
|
||||||
|
$CancelButton = New-Object System.Windows.Forms.Button
|
||||||
|
$CancelButton.Location = New-Object System.Drawing.Point(305,367)
|
||||||
|
$CancelButton.Size = New-Object System.Drawing.Size(75,30)
|
||||||
|
$CancelButton.Text = 'Cancel'
|
||||||
|
$CancelButton.Add_Click({$objForm.Close()})
|
||||||
|
|
||||||
|
$objForm.Controls.Add($CancelButton)
|
||||||
|
|
||||||
|
$objForm.Topmost = $true
|
||||||
|
$objForm.Add_Shown({$objForm.Activate()})
|
||||||
|
|
||||||
|
$OKButton.Enabled = $false
|
||||||
|
$Result = $objForm.ShowDialog()
|
||||||
|
|
||||||
|
if ($Result -ne [System.Windows.Forms.DialogResult]::OK) {
|
||||||
|
Exit
|
||||||
|
}
|
||||||
|
|
||||||
|
############
|
||||||
|
|
||||||
|
$PackageFamily = $($PackageList | Where {$_.Identity -eq $Package_ListBox.SelectedItem}).Family
|
||||||
|
$Arch = $Arch_ListBox.SelectedItem
|
||||||
|
$Ring = $($RingList | Where {$_.Name -eq $Ring_ListBox.SelectedItem}).Value
|
||||||
|
|
||||||
|
$ProgressPreference = 'SilentlyContinue'
|
||||||
|
|
||||||
|
if ($ProductID_TextBox.Text -eq '') {
|
||||||
|
try {
|
||||||
|
$Response = Invoke-WebRequest -UseBasicParsing -Method 'POST' -Uri 'https://store.rg-adguard.net/api/GetFiles' `
|
||||||
|
-Body "type=PackageFamilyName&url=$PackageFamily&ring=$Ring&lang=en-US"
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
$_.Exception
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$ProductID = $ProductID_TextBox.Text
|
||||||
|
|
||||||
|
try {
|
||||||
|
$Response = Invoke-WebRequest -UseBasicParsing -Method 'POST' -Uri 'https://store.rg-adguard.net/api/GetFiles' `
|
||||||
|
-Body "type=ProductId&url=$ProductID&ring=$Ring&lang=en-US"
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
$_.Exception
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$Links = $Response.Links.outerHTML | Where-Object {$_ -notmatch 'BlockMap' -and $_ -notmatch '\.eappx' `
|
||||||
|
-and $_ -notmatch '\.emsix' -and ($_ -match "$Arch" -or $_ -match '_neutral_')}
|
||||||
|
|
||||||
|
$FileList = New-Object System.Collections.ArrayList
|
||||||
|
|
||||||
|
Foreach ($File in $Links) {
|
||||||
|
$Package = $File.Split('>')[1].Split('<')[0]
|
||||||
|
$Family = $Package.Split('_')[0]
|
||||||
|
$Version = $Package.Split('_')[1]
|
||||||
|
|
||||||
|
$null = $FileList.Add([PSCustomObject]@{'Package' = $Package; 'Family' = $Family; 'Version' = [Version]$Version})
|
||||||
|
}
|
||||||
|
|
||||||
|
$AppsOnlyList = New-Object System.Collections.ArrayList
|
||||||
|
|
||||||
|
Foreach ($File in ($FileList | Sort-Object -Property Family,Version)) {
|
||||||
|
$match = $false
|
||||||
|
|
||||||
|
Foreach ($PreReq in ($DependencyList.GetEnumerator()).Name) {
|
||||||
|
if ($File.Family -match $PreReq) {
|
||||||
|
$DependencyList[$PreReq] = $File.Package
|
||||||
|
$match = $true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($match -eq $false) {
|
||||||
|
$URL = ($Links | Where-Object {$_-match $File.Package}).Split('"')[1]
|
||||||
|
|
||||||
|
try {
|
||||||
|
$Response = Invoke-WebRequest -UseBasicParsing -Method 'HEAD' -Uri $URL
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
$_.Exception
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
$LastModified = ([DateTime][string]$Response.Headers['Last-Modified']).ToString('yyyy-MM-dd HH:mm tt')
|
||||||
|
$Length = [uint32][string]$Response.Headers['Content-Length']
|
||||||
|
|
||||||
|
if ($Length -ge 1GB) {
|
||||||
|
$Size = '{0:N2} GB' -f [float]($Length/1GB)
|
||||||
|
}
|
||||||
|
elseif ($Length -ge 1MB) {
|
||||||
|
$Size = '{0:N2} MB' -f [float]($Length/1MB)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$Size = '{0:N2} KB' -f [float]($Length/1KB)
|
||||||
|
}
|
||||||
|
|
||||||
|
$null = $AppsOnlyList.Add([PSCustomObject]@{'Package' = $File.Package; 'Family' = $File.Family; 'Version' = [Version]$File.Version; `
|
||||||
|
'Major' = $File.Version.Major; 'Last-Modified' = $LastModified; 'Size' = $Size})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($AppsOnlyList.Count -eq 0) {
|
||||||
|
$null = $AppsOnlyList.Add([PSCustomObject]@{'Package' = 'No packages listed.'})
|
||||||
|
$AppsOnlyList | Out-GridView -Title 'Select Packages for Download' -PassThru | Out-Null
|
||||||
|
Exit
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($ShowAll_Checkbox.Checked -eq $false) {
|
||||||
|
$UserSelected = ($AppsOnlyList | Group-Object -Property Major | Foreach { $_.Group | Sort Last-Modified | Select -Last 1 } | `
|
||||||
|
Select-Object Family,Version,Package,Last-Modified,Size | Sort-Object -Property Last-Modified | `
|
||||||
|
Out-GridView -Title 'Select Packages for Download' -PassThru).Package
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$UserSelected = ($AppsOnlyList | Select-Object Family,Version,Package,Last-Modified,Size | Sort-Object -Property Last-Modified | `
|
||||||
|
Out-GridView -Title 'Select Packages for Download' -PassThru).Package
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($UserSelected).Count -eq 0) {
|
||||||
|
Exit
|
||||||
|
}
|
||||||
|
|
||||||
|
$DependencyPath = @()
|
||||||
|
Set-Location $PSScriptRoot
|
||||||
|
|
||||||
|
if ($PreReq_Checkbox.Checked -eq $true) {
|
||||||
|
$CurrentFiles = Get-ChildItem -Name | where {$_ -match '\.msix' -or $_ -match '\.appx'}
|
||||||
|
|
||||||
|
Foreach ($File in $CurrentFiles) {
|
||||||
|
Foreach ($PreReq in ($DependencyList.GetEnumerator()).Name) {
|
||||||
|
if ($PreReq -eq 'Microsoft.VCLibs' -and $File -match 'UWPDesktop') {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($File -match $PreReq -and $DependencyList[$PreReq] -ne $null) {
|
||||||
|
$FileVersion = [version]$File.Split('_')[1]
|
||||||
|
$DependencyVersion = [version]$DependencyList[$PreReq].Split('_')[1]
|
||||||
|
|
||||||
|
$DependencyPath += $File
|
||||||
|
|
||||||
|
if ($FileVersion -ge $DependencyVersion) {
|
||||||
|
'skipping "{0}"' -f ($File.Split('_')[0..2] -join '_')
|
||||||
|
$DependencyList[$PreReq] = $null
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
'Deleting "{0}"' -f ($File.Split('_')[0..2] -join '_')
|
||||||
|
|
||||||
|
try {
|
||||||
|
Remove-Item $File
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
$_.Exception
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$MergedList = ([array]$UserSelected + [array]($DependencyList.Values | Where-Object {$_ -ne $null})) | sort
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$MergedList = $UserSelected
|
||||||
|
}
|
||||||
|
|
||||||
|
############
|
||||||
|
|
||||||
|
Foreach ($Filename in $MergedList) {
|
||||||
|
$URL = ($Links | Where-Object {$_ -match $Filename}).Split('"')[1]
|
||||||
|
|
||||||
|
if (-not (Test-Path -Path $Filename -PathType Leaf)) {
|
||||||
|
'Downloading "{0}"' -f $Filename
|
||||||
|
|
||||||
|
try {
|
||||||
|
$Response = Invoke-WebRequest -UseBasicParsing -Uri $URL -OutFile $Filename -PassThru
|
||||||
|
|
||||||
|
$ChildItem = Get-ChildItem $Filename
|
||||||
|
$ChildItem.CreationTime = $ChildItem.LastWriteTime = $Response.BaseResponse.LastModified
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
$_.Exception
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
'Duplicate file "{0}"' -f $Filename
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($Sideload_Checkbox.Checked -eq $true) {
|
||||||
|
foreach ($Package in ($UserSelected | Sort-Object)) {
|
||||||
|
'Installing "{0}"' -f $Package
|
||||||
|
|
||||||
|
try {
|
||||||
|
if ($DependencyPath -ne '') {
|
||||||
|
Add-AppPackage -Path $Package -DependencyPath $DependencyPath
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Add-AppxPackage -Path $Package
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
$error[0].InvocationInfo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (([Environment]::GetCommandLineArgs() | Where-Object {$_ -like '-Command'}).Count -gt 0) {
|
||||||
|
Write-Host -NoNewline 'Press any key to close window.'
|
||||||
|
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user