From 0958d6a352f742b97a22b52eac00dba2e29cf6eb Mon Sep 17 00:00:00 2001 From: djpbessems Date: Wed, 23 Jun 2021 21:55:07 +0200 Subject: [PATCH] Retry winget package manager --- packer/windowsserver2019.pkr.hcl | 54 ++++++++++++++++---------------- scripts/Install-WinGet.ps1 | 48 ++++++++++++++++++++++------ 2 files changed, 66 insertions(+), 36 deletions(-) diff --git a/packer/windowsserver2019.pkr.hcl b/packer/windowsserver2019.pkr.hcl index 9dc42b1..2dbb323 100644 --- a/packer/windowsserver2019.pkr.hcl +++ b/packer/windowsserver2019.pkr.hcl @@ -187,42 +187,42 @@ source "vsphere-iso" "srv2019-baremetal" { build { sources = [ "source.vsphere-iso.srv2019-template", - "source.vsphere-iso.srv2019-virtual", - "source.vsphere-iso.srv2019-baremetal" + "source.vsphere-iso.srv2019-virtual" ] + // "source.vsphere-iso.srv2019-baremetal" provisioner "windows-update" { } - // provisioner "powershell" { - // scripts = [ - // "scripts/Install-WinGet.ps1" - // ] - // } - // provisioner "powershell" { - // inline = [ - // "winget install mozilla.firefox", - // "winget install 7zip.7zip", - // "winget install microsoft.dotnetframework" - // ] - // // valid_exit_codes = [0, 3010] - // } + provisioner "powershell" { + scripts = [ + "scripts/Install-WinGet.ps1" + ] + } provisioner "powershell" { inline = [ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12", - "Invoke-Expression ((New-Object Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" + "winget install mozilla.firefox", + "winget install 7zip.7zip", + "winget install microsoft.dotnetframework" ] + // valid_exit_codes = [0, 3010] } - provisioner "powershell" { - inline = [ - "choco config set --name=limit-output --value=LimitOutput", - "choco install -y dotnetfx", - "choco install -y 7zip.install", - "choco install -y sysinternals", - "choco install -y firefox" - ] - valid_exit_codes = [0, 3010] - } + // provisioner "powershell" { + // inline = [ + // "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12", + // "Invoke-Expression ((New-Object Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" + // ] + // } + // provisioner "powershell" { + // inline = [ + // "choco config set --name=limit-output --value=LimitOutput", + // "choco install -y dotnetfx", + // "choco install -y 7zip.install", + // "choco install -y sysinternals", + // "choco install -y firefox" + // ] + // valid_exit_codes = [0, 3010] + // } provisioner "windows-update" { } diff --git a/scripts/Install-WinGet.ps1 b/scripts/Install-WinGet.ps1 index b9cb018..8248d89 100644 --- a/scripts/Install-WinGet.ps1 +++ b/scripts/Install-WinGet.ps1 @@ -3,22 +3,52 @@ Param( # None ) +# Download dependencies +$AppxDependencies = @( + @{ + ShortName = 'vclibs' + QualifiedName = 'Microsoft.VCLibs.140.00_8wekyb3d8bbwe' + }, + @{ + ShortName = 'vclibsuwp' + QualifiedName = 'Microsoft.VCLibs.140.00.UWPDesktop_8wekyb3d8bbwe' + } +) +ForEach ($Dependency in $AppxDependencies) { + $InvokeWebRequestSplat = @{ + Uri = 'https://store.rg-adguard.net/api/GetFiles' + Method = 'POST' + ContentType = 'application/x-www-form-urlencoded' + Body = "type=PackageFamilyName&url=$($Dependency.QualifiedName)&ring=RP&lang=en-US" + UseBasicParsing = $True + } + $InvokeWebRequestSplat = @{ + Uri = ((Invoke-WebRequest @InvokeWebRequestSplat).Links | Where-Object {$_.OuterHTML -match '.appx' -and $_.outerHTML -match 'x64'}).href + OutFile = "$env:temp/$($Dependency.ShortName).appx" + } + Invoke-WebRequest @InvokeWebRequestSplat +} +# Download latest release from github $InvokeRestMethodSplat = @{ Uri = "https://api.github.com/repos/microsoft/winget-cli/releases/latest" Method = 'GET' } $InvokeWebRequestSplat = @{ - Uri = ((Invoke-RestMethod @InvokeRestMethodSplat).assets | Where-Object {$_.name -like '*.appxbundle'}).browser_download_url - Out = "$env:temp\winget.appxbundle" + Uri = ((Invoke-RestMethod @InvokeRestMethodSplat).assets | Where-Object {$_.name -like '*.appxbundle'}).browser_download_url + OutFile = "$env:temp\winget.appxbundle" } Invoke-WebRequest @InvokeWebRequestSplat -$InvokeWebRequestSplat = @{ - Uri = "https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx" - Out = "$env:temp\vclibs.appx" +# Install dependencies +$AppxDependencies.ShortName | ForEach-Object { + $AddAppxPackageSplat = @{ + Path = "$env:temp/$($_).appx" + } + Add-AppxPackage @AddAppxPackageSplat } -Invoke-WebRequest @InvokeWebRequestSplat +# Install winget +$AddAppxPackageSplat = @{ + Path = "$env:temp\winget.appxbundle" +} +Add-AppxPackage @AddAppxPackageSplat -If (Test-Path -Path "$env:temp\winget.appxbundle") { - & dism.exe /Online /Add-ProvisionedAppxPackage /PackagePath:"$env:temp\winget.appxbundle" /SkipLicense /DependencyPackagePath:"$env:temp\vclibs.appx" -} \ No newline at end of file