PowerShell: Backup files and folders
<Source lang="powershell">
- Name: Backup.ps1
- Author: Kalju H6bem2e
- Version: 0.1a
- Date: 26.05.2012
- Comment: Teeb varu koopiad antud folderist
- Main all muuta $strSourceFolder = Kust
- $strDestinationFolder = Kuhu
- Idee tuli sellest, et kasutan PlayStation Portable consooli, ja mul on erinevad m2lukaardid kus on erinevad salvestatud failid (Save Folderid).
- Script, mis v6tab vastavast kaustas ja teeb kuup2evalise koopia m22ratud kausta.
function DoSubFolders {
param([object] $objSrcFolder, [object] $objDstFolder) $colSrcSubFolders = $objSrcFolder.SubFolders foreach($objSrcSubFolder in $colSrcSubFolders) { $strSrcSubFolder = $objSrcSubFolder.Path $strDstSubFolder = $strSrcSubFolder.Replace($strSourceFolder, $strDestinationFolder) if( -not $FSO.FolderExists($strDstSubFolder)) { $FSO.CreateFolder($strDstSubFolder) Write-Host "L6ime folderi $strDstSubFolder" } $objDstSubFolder = $FSO.GetFolder($strDstSubFolder) BackupFolder $objSrcSubFolder $objDstSubFolder DoSubFolders $objSrcSubFolder $objDstSubFolder }
}
function BackupFolder {
param( [object] $objSrcFolder, [object] $objDstFolder) $strSrcFolder = $objSrcFolder.Path $strDstFolder = $objDstFolder.Path $colSrcFiles = $objSrcFolder.Files $colDstFiles = $objDstFolder.Files foreach ($objSrcFile in $colSrcFiles) { $strSrcFile = $strSrcFolder + "\" + $objSrcFile.Name $strDstFile = $strDstFolder + "\" + $objSrcFile.Name if($FSO.FileExists($strDstFile)) { $objDstFile = $FSO.GetFile($strDstFile) $dtSrcFile = $objSrcFile.DateLastModified $dtDstFile = $objDstFile.DateLastModified $iSec = (New-TimeSpan -Start $dtDstFile -End $dtSrcFile).TotalSeconds if($iSec -gt 2) # lubab 2 sekundilise vahe kui on CD-lt v6i muult v2liselt kettalt { $FSO.CopyFile($strSrcFile, $strDstFile, $true) Write-Host "Kopeerisin faili $strSrcFile to $strDstFile" $script:iCopyCount++ } } else { $FSO.CopyFile($strSrcFile, $strDstFile, $true) Write-Host "Kopeerisin faili $strSrcFile to $strDstFile" $script:iCopyCount++ } } #Kui failid olemas siis kututab olemasoleva 2ra ja asendab uuega foreach($objDstFile In $colDstFiles) { $strDstFile = $objDstFile.Path $strSrcFile = $strSrcFolder + "\" + $objDstFile.Name if( -not $FSO.FileExists($strSrcFile)) { $FSO.DeleteFile($strDstFile) Write-Host "Kustutasin faili $strDstFile" $script:iDestDeletedCount++ } } DoSubFolders $objSrcFolder $objDstFolder
}
function WaitKey {
param( [String] $strPrompt = "Vajuta suvalist nuppu ... ") Write-Host Write-Host $strPrompt -NoNewline $key = [Console]::ReadKey($true) Write-Host
}
- main
$date = Get-Date -Format d.MMMM.yyyy
- Folder kust v6tta
$strSourceFolder = "C:\DOS\" #siia pane oma kaust
- Kuhu kopeerib
$strDestinationFolder = "C:\Backup\$date\" #siia pane oma kaust
$iCopyCount = 0 $iDestDeletedCount = 0
Write-Host Write-Host "Backing up " -NoNewline -ForegroundColor "White" Write-Host $strSourceFolder -ForegroundColor "Cyan" -NoNewline Write-Host " to " -NoNewline -ForegroundColor "White" Write-Host $strDestinationFolder -ForegroundColor "Cyan" Write-Host
$FSO = New-Object -COM Scripting.FileSystemObject
#testib kas Folder kus v6tta on olemas, kui ei ole l6petab scripti
if( -not $FSO.FolderExists($strSourceFolder) ) {
Write-Host "Viga: l2hte kasuta pole!" -ForegroundColor "Red" Write-Host Write-Host "V2ljume skriptist" WaitKey "Vajuta suvalist nuppu ... " exit
}
#testib kas kausta kuhu kopeeritakse backup andmed on olemas, kui mitte siis kysib kas võib luua kausta
if( -not $FSO.FolderExists($strDestinationFolder) ) {
Write-Host "Hoiatus: Sihtkoha kausta ei ole" $p = Read-Host "Kas loome selle ja j2tkame? (Y / N) " Write-Host if( $p.Substring(0, 1).ToUpper() -eq "Y" ) { $FSO.CreateFolder($strDestinationFolder) } else { Write-Host "V2ljume skriptist" WaitKey "Vajuta suvalist nuppu ... " exit }
}
$objSourceFolder = $FSO.GetFolder($strSourceFolder) $objDestinationFolder = $FSO.GetFolder($strDestinationFolder)
BackupFolder $objSourceFolder $objDestinationFolder
if( ($iCopyCount -eq 0) -and ($iDestDeletedCount -eq 0) ) {
Write-Host Write-Host "Folders are synchronized" -ForegroundColor "magenta"
} else {
Write-Host Write-Host $iCopyCount "Failid ja kaustad kopeeritud allikast sihtkohta" -ForegroundColor "magenta" Write-Host $iDestDeletedCount "Yleliigset kustutatud" -ForegroundColor "magenta"
}
WaitKey "Vajuta suvalist nuppu ... "