Skip to content

Instantly share code, notes, and snippets.

@craeckor
Last active November 29, 2024 21:27
Show Gist options
  • Select an option

  • Save craeckor/179c1ced5896270012e905aaa7bc1530 to your computer and use it in GitHub Desktop.

Select an option

Save craeckor/179c1ced5896270012e905aaa7bc1530 to your computer and use it in GitHub Desktop.
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit }
Write-Host "Microsoft Store Installer"
Write-Host "Select, if you want to install only the Microsoft Store or the Microsoft Store and all requirements."
Write-Host "Warning: Only select the option 1 if you are sure that all requirements are already installed or if you using one of my images."
Write-Host "1. Install only the Microsoft Store"
Write-Host "2. Install the Microsoft Store and all requirements"
$selection = Read-Host "Select an option: "
if ($selection -eq "1") {
$InstallAllRequirements = $false
} elseif ($selection -eq "2") {
$InstallAllRequirements = $true
} else {
Write-Host "Invalid option. Aborting..."
exit
}
$foldername = Get-Date -Format yyyyMMdd_HHmmss
$workpath = "$env:TEMP\$foldername"
# Create a temporary folder
New-Item -Path $workpath -ItemType Directory -Force | Out-Null
Start-Sleep -Seconds 3
Set-Location -Path $workpath
$b64 = "$workpath\b64"
$zipf = "$workpath\f.zip"
"UEsDBBQAAAAIAAKZN1nYfb8auQEAAKwDAAAQAAAAZGlzYWJsZS1pcHY2LnBzMZVSwWrbQBC9G/wPD1eHFrqGXEIpFOpaSXAojqkKvRTCRhrZm6531d2JU0jz752Vpbpq7UPZg8TMm3lv3kxBrD76UrPxDmqleYNsVRRlMA1/8p7HoxdY6cA4g0Juor6zhMVqdw7tKsw32q0J+bIYjxIyp9o4gkaTGrFHZB8IPpi1cdoiErNx6zgeZf3vpbHU0r7DZMD8VVe6YQpFB5zeR+8me54rYpQPIZDjgxhR8SdBT9rXC8H7p/EIQFtyCKduakk82/N9MK6SBNTcbxvvhGKRYxtvuWxMc942SFS/67sGuYtzawRdUNhRmFVVoCg6nveKC7074kOySOO6uFmiFh9Q+4BAUp6ysFrkHJvkJ+beJdRnr67FFQmkPUqQRUC3xn8cboUMdyil2lo44kcfvqFzXFT/jyXC/mVDgdTN3T2VjKfsdnrhEkkFRd+RcXigZ0Fd+nChy02P65ZRHKda6i1BOqXvKWLV02S1tpEOZhPD0WN3EWkdES/ph942lt7iyvu1pZR8JeYKLm2zQ8kRnk3bN3mNyZtp++ToBhs+PcrJO4BaOKZQ65Jm1uiYJvsrogYFFDGUJsP9AlBLAQI/ABQAAAAIAAKZN1nYfb8auQEAAKwDAAAQACQAAAAAAAAAIAAAAAAAAABkaXNhYmxlLWlwdjYucHMxCgAgAAAAAAABABgA6HbgJdsN2wEAAAAAAAAAAAAAAAAAAAAAUEsFBgAAAAABAAEAYgAAAOcBAAAAAA==" > $b64
[System.IO.File]::WriteAllBytes("$zipf", [System.Convert]::FromBase64String((Get-Content -Path $b64 -Raw)))
Expand-Archive -Path $zipf -DestinationPath $workpath -Force
# Network-Check
do {
Clear-Host
$check = 0
# Repeat the ping check 10 times
for ($i = 1; $i -le 10; $i++) {
Start-Sleep -Seconds 1
if (-not (Test-Connection -ComputerName 1.1.1.1 -Count 1 -Quiet)) {
$check++
}
}
# Check the value of check variable
if ($check -ge 1) {
Write-Host "Please connect your Laptop or PC to the internet."
Write-Host "Waiting 10 Seconds..."
Start-Sleep -Seconds 10
}
} while ($check -ge 1)
Start-Process -Wait powershell -ArgumentList "-ExecutionPolicy Bypass -File $workpath\disable-ipv6.ps1" -WindowStyle Hidden
try {
Invoke-RestMethod -Uri "https://store.rg-adguard.net/api/GetFiles" -Method Post | Out-Null
} catch {
Write-Host "https://store.rg-adguard.net/api/GetFiles is not reachable."
Write-Host "Some important services are down. Aborting..."
exit
}
try {
Invoke-RestMethod -Uri "https://cdn1.craeckor.ch/data/.ping.txt" | Out-Null
} catch {
Write-Host "https://cdn1.craeckor.ch is not reachable."
Write-Host "Some important services are down. Aborting..."
exit
}
try {
Invoke-RestMethod -Uri "https://cdn2.craeckor.ch" | Out-Null
} catch {
Write-Host "https://cdn2.craeckor.ch is not reachable."
Write-Host "Some important services are down. Aborting..."
exit
}
Write-Host "Everything is online. Continue..."
# Download Get-AppxPackage-DownloadLinks-Function and Install-AppxProvisionedPackage-Function and Get-CurlDownload-Function
$maxRetries = 10
$retryDelay = 10
$retryCount = 0
$FileAdded = $false
while ($retryCount -lt $maxRetries -and -not $FileAdded) {
curl.exe -k -s -L --connect-timeout 45 --retry 5 --retry-max-time 120 --retry-connrefused -o "$workpath\data.zip" -X GET "https://cdn2.craeckor.ch/global/uploads/data/new-win10iotltscc/additional.zip"
Start-Sleep -Seconds 3
if ($LASTEXITCODE -eq 0) {
if (Test-Path -Path $workpath\data.zip) {
$FileAdded = $true
} else {
Start-Sleep -Seconds $retryDelay
$retryCount++
}
} else {
Start-Sleep -Seconds $retryDelay
$retryCount++
}
}
# Extract Get-AppxPackage-DownloadLinks-Function and Install-AppxProvisionedPackage-Function
Expand-Archive -Path $workpath\data.zip -DestinationPath $workpath\data -Force
Start-Sleep -Seconds 3
# Import Get-AppxPackage-DownloadLinks-Function
Import-Module $workpath\data\Get-AppxPackage-DownloadLinks-Function.ps1
Import-Module $workpath\data\Install-AppxProvisionedPackage-Function.ps1
Import-Module $workpath\data\Get-CurlDownload-Function.ps1
Start-Sleep -Seconds 3
if ($InstallAllRequirements) {
$download = @()
$data = Get-AppxPackage-DownloadLinks -PackageFamilyName Microsoft.WindowsStore_8wekyb3d8bbwe -IgnoreEmptyList
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.NET.Native.Framework*x86*.appx*"}).DownloadLink
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.NET.Native.Framework*x64*.appx*"}).DownloadLink
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.NET.Native.Runtime*x86*.appx*"}).DownloadLink
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.NET.Native.Runtime*x64*.appx*"}).DownloadLink
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.UI.Xaml.2.8*x64*.appx*"}).DownloadLink
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.UI.Xaml.2.8*x86*.appx*"}).DownloadLink
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.VCLibs.140.00.UWPDesktop*x64*.appx*"}).DownloadLink
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.VCLibs.140.00.UWPDesktop*x86*.appx*"}).DownloadLink
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.VCLibs.140.00_*x64*.appx*"}).DownloadLink
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.VCLibs.140.00_*x86*.appx*"}).DownloadLink
# Download and install the required dependencies
$packagePath = "$workpath\package.appx"
$download | ForEach-Object {
Get-CurlDownload -URL $_ -OutFile $packagePath
Install-AppxProvisionedPackage -PackagePath $packagePath
Remove-Item -Path $packagePath -Force
Start-Sleep -Seconds 3
}
# Instsall Microsoft Windows AppRuntime
$download = @()
$data = Get-AppxPackage-DownloadLinks -PackageFamilyName Microsoft.WindowsAppRuntime.1.5_8wekyb3d8bbwe -IgnoreEmptyList
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.WindowsAppRuntime.1.5*x86*.msix*"}).DownloadLink
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.WindowsAppRuntime.1.5*x64*.msix*"}).DownloadLink
$data = Get-AppxPackage-DownloadLinks -PackageFamilyName Microsoft.WindowsAppRuntime.1.6_8wekyb3d8bbwe -IgnoreEmptyList
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.WindowsAppRuntime.1.6*x86*.msix*"}).DownloadLink
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.WindowsAppRuntime.1.6*x64*.msix*"}).DownloadLink
# Download and install Microsoft Windows AppRuntime
$packagePath = "$workpath\package.msix"
$download | ForEach-Object {
Get-CurlDownload -URL $_ -OutFile $packagePath
Install-AppxProvisionedPackage -PackagePath $packagePath
Remove-Item -Path $packagePath -Force
Start-Sleep -Seconds 3
}
$download = @()
# Download and install Microsoft Service Store Engagement
# Get the download link for Microsoft Service Store Engagement
$data = Get-AppxPackage-DownloadLinks -PackageFamilyName Microsoft.Services.Store.Engagement_8wekyb3d8bbwe -IgnoreEmptyList
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.Services.Store.Engagement*x64*.appx*"}).DownloadLink
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.Services.Store.Engagement*x86*.appx*"}).DownloadLink
# Download and install Microsoft Service Store Engagement
$download | ForEach-Object {
Get-CurlDownload -URL $_ -OutFile $packagePath
Install-AppxProvisionedPackage -PackagePath $packagePath
Remove-Item -Path $packagePath -Force
Start-Sleep -Seconds 3
}
$download = @()
# Download and install Microsoft Store Purchase App
# Get the download link for Microsoft Store Purchase App
$data = Get-AppxPackage-DownloadLinks -PackageFamilyName Microsoft.StorePurchaseApp_8wekyb3d8bbwe -IgnoreEmptyList
$download = ($data | Where-Object {$_.PackageName -like "*Microsoft.StorePurchaseApp*.appxbundle*"}).DownloadLink
# Download and install Microsoft Store Purchase App
$packagePath = "$workpath\package.appxbundle"
Get-CurlDownload -URL $download -OutFile $packagePath
Install-AppxProvisionedPackage -PackagePath $packagePath
Remove-Item -Path $packagePath -Force
Start-Sleep -Seconds 3
# Download and install winget
# Get the download link for winget
$data = Get-AppxPackage-DownloadLinks -PackageFamilyName Microsoft.DesktopAppInstaller_8wekyb3d8bbwe -IgnoreEmptyList
$download = ($data | Where-Object {$_.PackageName -like "*Microsoft.DesktopAppInstaller*.msixbundle*"}).DownloadLink
# download and install winget
$packagePath = "$workpath\package.msixbundle"
Get-CurlDownload -URL $download -OutFile $packagePath
Install-AppxProvisionedPackage -PackagePath $packagePath
Remove-Item -Path $packagePath -Force
Start-Sleep -Seconds 3
# Register all provisioned packages
$appxope = Get-AppxProvisionedPackage -Online
$appxope | Where-Object {$_.PackageName -like "*Microsoft.NET.Native.Framework*x86*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.NET.Native.Framework*x64*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.NET.Native.Runtime*x86*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.NET.Native.Runtime*x64*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.UI.Xaml.2.8*x64*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.UI.Xaml.2.8*x86*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.VCLibs.140.00.UWPDesktop*x64*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.VCLibs.140.00.UWPDesktop*x86*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.VCLibs.140.00_*x64*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.VCLibs.140.00_*x86*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.WindowsAppRuntime.1.5*x86*.msix*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.WindowsAppRuntime.1.5*x64*.msix*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.WindowsAppRuntime.1.6*x86*.msix*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.WindowsAppRuntime.1.6*x64*.msix*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.Services.Store.Engagement*x64*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.Services.Store.Engagement*x86*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.StorePurchaseApp*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
$appxope | Where-Object {$_.PackageName -like "*Microsoft.DesktopAppInstaller*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
}
# Download required dependencies for Xbox
$download = @()
$data = Get-AppxPackage-DownloadLinks -PackageFamilyName Microsoft.WindowsStore_8wekyb3d8bbwe -IgnoreEmptyList
$download += ($data | Where-Object {$_.PackageName -like "*Microsoft.WindowsStore*.msixbundle*"}).DownloadLink
# Download and install Xbox and Microsoft Store
$packagePath = "$workpath\package.msixbundle"
$download | ForEach-Object {
Get-CurlDownload -URL $_ -OutFile $packagePath
Install-AppxProvisionedPackage -PackagePath $packagePath
Remove-Item -Path $packagePath -Force
Start-Sleep -Seconds 3
}
# Register all provisioned packages
$appxop = Get-AppxProvisionedPackage -Online
$appxop | Where-Object {$_.PackageName -like "*Microsoft.WindowsStore*"} | ForEach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)" | Out-Null}
Copy-Item -Path $workpath\data\enable-ipv6.ps1 -Destination $workpath -Force
Start-Sleep -Seconds 3
Start-Process -Wait powershell -ArgumentList "-ExecutionPolicy Bypass -File $workpath\enable-ipv6.ps1" -WindowStyle Hidden
# Clean up
Set-Location -Path $env:TEMP
Remove-Item -Path $workpath -Recurse -Force
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment