PowerShell a Duplicati
V jednom z posledních blogpostů jsem se zmiňoval o Duplicati, které jednoduše a elegantně umí zálohovat data na mnoho způsobů a do mnoha míst ať lokálních, vzdálených či cloudových. Tentokrát chci ukázat jak můžeme jednoduše zkombinovat PowerShell a Duplicati a usnadnit si tak běžné úkony při zálohování.
S pomocí skriptů si obecně můžeme usnadnit spoustu úkonů při správě a konfiguraci čehokoli a pro hromadné zálohování s potřebou variability argumentů nám nic jiného nezbývá.
PowerShell a Duplicati v jednom skriptu
Zálohování jedné složky
Pro potřebu zálohování jediné složky bychom ani skript nepotřebovali.
param( [string]$path, [string]$dest ) $substring=$dest.Substring(0,7) $destination="$substring$dest" $program="C:/Program Files/Duplicati/Duplicati.CommandLine.exe" $backupPath=$path ##for troubleshooting path #echo $substring #echo $backupPath #echo $destination$backupName &$program backup $backupPath $destination --volsize=512mb --no-encryption --full-if-older-than=1M
Jediný problém se kterým jsem se při psaní skriptu pro Duplicati setkal je ten, že je nutné zduplikovat několik prvních znaků cesty, což zde provádím pomocí podřetězce.
Vše včetně cesty uvedu v proměnných, které pak jen složím do výsledného příkazu se všemi argumenty.
V ukázce jsem ponechal zakomentované řádky pro případné řešení problémů s cestou (může se vyskytnout u krátké cesty kam zálohovat).
Zálohování více složek, každou jako samostatnou zálohu
Při použití tohoto komplexnějšího řešení potřebujeme dva pomocné textové soubory (při použití parametru jeden).
# Ukázka staršího skriptu bez použití parametrů a s méně proměnnými $folderList="C:\Users$Env:username\list.txt" $destFromFile="C:\Users$Env:username\dest.txt" #lze zaměnit za argument $timeStamp = Get-Date -format dd.MM.yy_HH-mm ForEach ($item in Get-Content $folderList) { $program="C:/Program Files/Duplicati/Duplicati.CommandLine.exe" $backup=(Get-Item $item).Name Set-Location E: if("E:/Duplitest/$backup" -eq $false) { New-Item -ItemType directory -Path $backupDestination/$backup } &$program backup $item $backupDestination/$backup --volsize=512mb --no-encryption --full-if-older-than=1M --backup-prefix=$backup }
V této ukázce můžeme vidět využití ForEach cyklu a proměnných, které jsou vytaženy z pomocných souborů (eventuálně i parametru).
Stejně jako při zálohování jedné složky je nutné určitým způsobem zdvojit několik prvních znaků.
Nejlepší řešení
Nejideálnější řešení jsem nalezl v kombinaci dvou skriptů exportovaných do „exáče“. První z nich po spuštění vykreslí GUI dialog s dotazem CO zálohovat, následovaný dalším KAM to zálohovat a tím vytvoří zástupce s cestami ve formě argumentů pro druhý exáč, který provede zálohování přesně dle zadaných argumentů.
param( [string]$target="C:\Users$env:username\backup.exe" ) function Select-Folder($message, $path) { $object = New-Object -comObject Shell.Application $folder = $object.BrowseForFolder(0, $message, 0, $path) if ($folder -ne $null) { $folder.self.Path } } $WshShell = New-Object -ComObject WScript.Shell $app = new-object -com Shell.Application $Shortcut = $WshShell.CreateShortcut("C:\Users$env:username\test.lnk") $backupDir = Select-Folder("Vyber složku k zálohování", 0) $destinationDir = Select-Folder("Kam zálohovat", 0) echo $backupDir echo $destinationDir $Shortcut.TargetPath = $target $Shortcut.Arguments="$backupDir $destinationDir" $Shortcut.Description="Configuration tool for backup purpose" $Shortcut.Save()
Tento ukázkový skript jsem použil v kombinaci s prvním skriptem v horní části.
Závěrem
Jak více a více poznávám sílu a možnosti PowerShellu, tak ho používám i pro tyto běžné činnosti a plány využití PowerShellu v kombinaci s aplikacemi třetích stran mám velké, ale nejdřív se řádně seznamuji s PowerShellem. V lednu jsem dokončil na MVA další kurz Powershellu.
Už jsem také úplně přešel na tvorbu PowerShell skriptů na PowerShell Studio od Sapienu, které mi právě dovoluje skripty exportovat do EXE formátů a nechávat je používat i běžné uživatele.
Někteří možná zaznamenali, že v lednu jsem napsal jen 1. ledna shrnutí za loňský rok a nic víc ne. Důvody byly hlavně dva, a to zkouškové v první půlce ledna a následně i vyšší pracovní vytížení a také i menší experiment, jestli se bude návštěvnost výrazně snižovat, pokud nebudu psát takto dlouho a experiment vyšel pozitivně.
Oproti prosinci jsem získal dokonce o více než 25% vyšší návštěvnost (2400 UIP se zvedlo na téměř 3100 UIP).
- Pokud se ti článek líbil, tak sdílení potěší 😉