Add a backup script for Visual Studio

This commit is contained in:
Manuel Thalmann 2024-09-03 12:02:32 +02:00
parent 875ac600df
commit e54a92dc52

View file

@ -6,8 +6,10 @@ param(
& { & {
param($parameters) param($parameters)
. "$PSScriptRoot/../../Scripts/Restoration.ps1";
. "$PSScriptRoot/../../../Common/Scripts/BrowserAutomation.ps1"; . "$PSScriptRoot/../../../Common/Scripts/BrowserAutomation.ps1";
. "$PSScriptRoot/../../../Common/Scripts/Software.ps1"; . "$PSScriptRoot/../../../Common/Scripts/Software.ps1";
. "$PSScriptRoot/../../../Common/Scripts/SoftwareManagement.ps1";
. "$PSScriptRoot/../../../Common/Scripts/System.ps1"; . "$PSScriptRoot/../../../Common/Scripts/System.ps1";
[System.Tuple[string, string, string][]] $versions = @( [System.Tuple[string, string, string][]] $versions = @(
@ -17,18 +19,64 @@ param(
[System.Tuple]::Create("visualstudio2022community", "VisualStudio.17.Release", "Microsoft.VisualStudio.Product.Community") [System.Tuple]::Create("visualstudio2022community", "VisualStudio.17.Release", "Microsoft.VisualStudio.Product.Community")
); );
<#
.SYNOPSIS
Gets the path to the Visual Studio Installer.
#>
function Get-InstallerPath {
return "$((Get-KnownFolder ProgramFilesX86).Path)/Microsoft Visual Studio/Installer/vs_installer.exe";
}
<#
.SYNOPSIS
Gets the path to the configuration file in the backup archive.
.PARAMETER PackageName
The name of the package to get the configuration for.
#>
function Get-ConfigPath {
param(
[string] $PackageName
)
return Join-Path "Visual Studio" "$PackageName.vsconfig";
}
Start-SoftwareInstaller @parameters ` Start-SoftwareInstaller @parameters `
-Backup {
foreach ($version in $versions) {
if (Test-ChocoPackage $version[0]) {
Write-Host "Backing up ``$($version[0])";
$configFile = New-TemporaryFile;
Start-Process -FilePath (Get-InstallerPath) -Wait `
-ArgumentList @(
"export",
"--channelId", $version[1],
"--productId", $version[2],
"--config", $configFile,
"--quiet"
);
Add-BackupArtifacts -Source $configFile -Path (Get-ConfigPath $version[0]);
Remove-Item $configFile;
}
}
} `
-Installer { -Installer {
foreach ($version in $versions) { foreach ($version in $versions) {
$packageName = $version[0]; $packageName = $version[0];
Write-Host "Installing ``$packageName``"; $file = New-TemporaryFile;
Install-ChocoPackage $packageName; Remove-Item $file;
Expand-BackupArtifacts -Path (Get-ConfigPath $packageName) -Target $file;
if (Test-Path $file) {
Write-Host "Restoring ``$packageName``";
Install-ChocoPackage $packageName -ArgumentList "--params","--config `"$file`"";
}
} }
Remove-DesktopIcon "CocosCreator*"; Remove-DesktopIcon "CocosCreator*";
Remove-DesktopIcon "Unity Hub*"; Remove-DesktopIcon "Unity Hub*";
}; };
# ToDo: Add restoration
# Only restore version if it has been backed up
} $PSBoundParameters; } $PSBoundParameters;