functions/Restore-VSCode.ps1

function Restore-VSCode {
    <#
    .SYNOPSIS
    Restore VS Code from a backup
     
    .DESCRIPTION
    Restore VS Code from a backup
     
    .PARAMETER Path
    Path to backup file
     
    .PARAMETER Settings
    Switch to restore settings
     
    .PARAMETER Extensions
    Switch to restore extensions
     
    .EXAMPLE
    Restore-VSCode -Path .\VSCode-2019-01-31T23.33.58.3351871+01.00.zip -Settings -Extensions
     
    .NOTES
    General notes
    #>

    
    [CmdletBinding()]
    param (
        # Parameter help description
        [Parameter(Mandatory)]
        [string]
        $Path,
        # Parameter help description
        [Parameter()]
        [switch]
        $Settings,
        # Parameter help description
        [Parameter()]
        [switch]
        $Extensions
    )
    
    begin {
    }
    
    process {
        #Can't write some files while Code is running
        $CodeRunning = Get-Process code -ErrorAction SilentlyContinue
        
        if($CodeRunning) {
            Write-Verbose "Closing VS Code"
            $CodeRunning.CloseMainWindow() | Out-Null
        }

        $ExtensionsDirectory = "$env:USERPROFILE\.vscode"
        $SettingsDirectory = "$env:APPDATA\Code\User\settings.json"

        Expand-Archive -Path $Path -DestinationPath $env:TEMP -force
        if($Extensions.IsPresent) {
            Copy-Item -Path "$env:TEMP\.vscode\extensions" -Destination $ExtensionsDirectory -Force -Recurse
        }
        if($Settings.IsPresent) {
            Copy-Item -LiteralPath "$env:TEMP\settings.json" -Destination $SettingsDirectory -Force
        }
    }
    
    end {
    }
}