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 ... "