functions/Backup-VSCode.ps1

function Backup-VSCode {
    <#
    .SYNOPSIS
    Short description
     
    .DESCRIPTION
    Long description
     
    .PARAMETER Path
    Parameter description
     
    .PARAMETER Settings
    Parameter description
     
    .PARAMETER Extensions
    Parameter description
     
    .EXAMPLE
    An example
     
    .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 {
        $TimeStamp = Get-Date -Format o | foreach {$_ -replace ":", "."}
        $Name = "VSCode-$($TimeStamp).zip"
    }
    
    process {
        #Can't read some files while Code is running
        $CodeRunning = Get-Process code
        
        if($CodeRunning) {
            Write-Verbose "Closing VS Code"
            $CodeRunning.CloseMainWindow() | Out-Null
        }

        $ExtenionsDirectory = "$env:USERPROFILE\.vscode"
        $SettingsDirectory = "$env:APPDATA\Code\User\settings.json"
        if($Extensions) {
            try {
                Compress-Archive -Path $ExtenionsDirectory -DestinationPath $Path\$Name -Update -CompressionLevel NoCompression
            }
            catch {
                throw $_
            }
        }
        if($Settings) {
            try {
                Compress-Archive -LiteralPath $SettingsDirectory -DestinationPath $Path\$Name -Update
            }
            catch {
                throw $_
            }
        }
    }
    
    end {
    }
}