Założenia
Skrypt pozwala na archiwizację wybranego profilu użytkownika. Archiwizacja polega na skompresowaniu profilu użytkownika zgodnie z zadanym filtrem, oraz umieszczenie go w określonej lokalizacji (również sieciowej)
Parametry domyślne:
-userLogin -destinationDir
Treść skryptu
param([Parameter(Mandatory=$true)][string]$userLogin, [Parameter(Mandatory=$true)][string]$destinationDir ,[string]$filter = "(name = *.*)", [switch]$skipOnError)
# Skrypt archiwizujący profil użytkownika
# umożliwia skompresowanie profilu użytkownika zgodnie z zadanym filtrem,
# oraz umieszczenie go w określonej lokalizacji (również sieciowej)
# Parametry:
# -userLogin - nazwa użytkownika w postaci: login , lub DOMENA\login
# -destinationDir - katalog docelowy np. c:\ , lub \\192.168.1.1\backups
# -filter - filtr określający jakie pliki mają być achiwizowane (domyślnie wszystkie)
# szczegóły http://dotnetzip.herobo.com/DNZHelp/html/4469abe7-8fa4-101e-975d-305d2fd0affb.htm
# np. "(name != *.mp3) and (name != *.avi)" - wyklucza pliki mp3 i avi
# -skipOnError - pomiń pliki, których nie można dodać
$a = [System.Reflection.Assembly]::LoadFrom([System.AppDomain]::CurrentDomain.BaseDirectory + "ext\Ionic.Zip.dll");
try
{
$ob = New-Object System.Security.Principal.NTAccount($userLogin)
$sid = $ob.Translate([System.Security.Principal.SecurityIdentifier])
}
catch
{
Write-Error "Unable to find user $userLogin"
exit -2
}
$regPath = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\' + $sid
$path = (Get-ItemProperty -path $regPath).profileImagePath
$zipFile = $destinationDir + "\" +$userLogin.Replace('\','.') + (Get-Date).ToShortDateString() + ".zip"
"Writing $path to $zipFile"
try
{
$strWriter = new-object System.IO.StringWriter
$zip = new-object Ionic.Zip.ZipFile
$zip.UseZip64WhenSaving = [Ionic.Zip.Zip64Option]::AsNecessary
if ($skipOnError)
{
$zip.StatusMessageTextWriter = $strWriter
$zip.ZipErrorAction = [Ionic.Zip.ZipErrorAction]::Skip
}
$zip.AddSelectedFiles($filter, $path,"",$true)
$zip.Save($zipFile)
}
finally
{
[System.Text.RegularExpressions.Regex]::Replace($strWriter.ToString(), "^adding.*$[\r\n]*", [String]::Empty, [System.Text.RegularExpressions.RegexOptions]::Multiline)
$zip.Dispose()
}
Parametry:
Wymagane:
userLogin - nazwa użytkownika w postaci: login, lub DOMENA\login,
destinationDir - katalog docelowy np. c:\ , lub \\192.168.1.1\backups,
Opcjonalne:
filter - filtr określający jakie pliki mają być achiwizowane (domyślnie wszystkie) np. "(name != *.mp3) and (name != *.avi)" - wyklucza pliki z rozszerzeniem mp3 i avi,
skipOnError - pomiń pliki, których nie można dodać.