Import-Module "$PSScriptRoot/../../scripts/Common/Scripts/Context.ps1" -Force; function Get-BackupCandidates() { [System.Collections.Generic.List[System.Tuple[string, string, string[]]]]$candidates = @(); $candidates.AddRange( [System.Tuple[string, string, string[]][]]@( [System.Tuple]::Create("Home", "$HOME", @("-i@`"$PSScriptRoot/FileLists/Home.include.txt`"", "-x@`"$PSScriptRoot/FileLists/Home.exclude.txt`"")), [System.Tuple]::Create("Public", "$env:PUBLIC", @("-i@`"$PSScriptRoot/FileLists/Public.include.txt`"", "-x@`"$PSScriptRoot/FileLists/Public.exclude.txt`"")))); return $candidates; } function Invoke-FileBackup([Context] $context) { foreach ($candidate in Get-BackupCandidates) { $archiveName = $context.FileArchivePath($candidate[0]); if (Test-Path $archiveName) { Remove-Item -Recurse $archiveName; } Start-Process -WorkingDirectory $candidate[1] ` -ArgumentList ( @( "a", "-xr!desktop.ini", "-xr!{t,T}humbs.db") + $candidate[2] + @($archiveName)) ` -FilePath "7z" ` -NoNewWindow ` -Wait; } }