diff --git a/scripts/Windows/Software/VisualStudio/Manage.ps1 b/scripts/Windows/Software/VisualStudio/Manage.ps1 index 5910fa21..0779d0da 100644 --- a/scripts/Windows/Software/VisualStudio/Manage.ps1 +++ b/scripts/Windows/Software/VisualStudio/Manage.ps1 @@ -6,8 +6,10 @@ param( & { param($parameters) + . "$PSScriptRoot/../../Scripts/Restoration.ps1"; . "$PSScriptRoot/../../../Common/Scripts/BrowserAutomation.ps1"; . "$PSScriptRoot/../../../Common/Scripts/Software.ps1"; + . "$PSScriptRoot/../../../Common/Scripts/SoftwareManagement.ps1"; . "$PSScriptRoot/../../../Common/Scripts/System.ps1"; [System.Tuple[string, string, string][]] $versions = @( @@ -17,18 +19,64 @@ param( [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 ` + -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 { foreach ($version in $versions) { $packageName = $version[0]; - Write-Host "Installing ``$packageName``…"; - Install-ChocoPackage $packageName; + $file = New-TemporaryFile; + 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 "Unity Hub*"; }; - - # ToDo: Add restoration - # Only restore version if it has been backed up } $PSBoundParameters;