Skrypt w BUDOWIE
Scenariusz:
1. Należy zrobić kopie baz danych z Serwera SQL w formacie: NazwaBazy.bak,
2. Wszyskie kopie BAZ DANYCH mją zostać spakowane do archiwum ZIP w formacie: archiwum-datawykonania.zip,
3. Skopiowanie wszystkich plików ZIP do innej lokalizacji (dysk lokalny, dysk sieciowy, FTP, azureBlob....),
4. Skasowania z bierzącego katalogu (C:\APP_BACKUP) wszystkich plików *.bak (na bierząco),
5. Skasowania z bierzącego katalogu (C:\Archiwum) plików archiwum ZIP starszych niż 5 dni,
4. Skasowania z bierzącego katalogu (C:\APP_BACKUP) wszystkich plików *.zip (na bierząco),
6. Skrypt ma się wykonywać codziennie według harmonogramu zadać.
Jeżeli są jakieś pomysły to poproszę o Wasze wersje ;) na:Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie w przeglądarce obsługi JavaScript.
#Zmienne
$ServerInstance = "CU01SQL\INSERTGT"
$DataBase1 = „baza1”
$DataBase2 = "baza2”
$DataBase3 = "baza3”
$DataBase4 = "baza4”
$DataBase5 = "baza5”
$SharedFolder = "\\cu01sql\APP_BACKUP"
$destenation = "C:\APP_BACKUP"
$Date = Get-Date -format yyyyMMdd
$Archive = "Archiwum"
$ThisBak = (Get-Date).AddDays(0).ToString("dd-mm-yyyy")
$OldFile = (Get-Date).AddDays(-5).ToString("dd-mm-yyyy")
$compressionLevel= [System.IO.Compression.CompressionLevel]::Optimal
#Call SQL Command
Backup-SqlDatabase -ServerInstance $ServerInstance -Database $DataBase1 -BackupFile "$($SharedFolder)\$DataBase1-$Date.bak"
Backup-SqlDatabase -ServerInstance $ServerInstance -Database $DataBase2 -BackupFile "$($SharedFolder)\$DataBase2-$Date.bak"
Backup-SqlDatabase -ServerInstance $ServerInstance -Database $DataBase3 -BackupFile "$($SharedFolder)\$DataBase3-$Date.bak"
Backup-SqlDatabase -ServerInstance $ServerInstance -Database $DataBase4 -BackupFile "$($SharedFolder)\$DataBase4-$Date.bak"
Backup-SqlDatabase -ServerInstance $ServerInstance -Database $DataBase5 -BackupFile "$($SharedFolder)\$DataBase5-$Date.bak"
#ZIP Kompresja plików *.bak do *.zip z datą w nazwie--------------------------------------------------------
Compress-Archive -Path C:\APP_BACKUP\*.bak -Update -DestinationPath $Destenation\Archiwum_$DateTime
#Usuwanie plików *BAK
Remove-Item C:\APP_BACKUP\*.bak
#Usówanie plików starszych niz 5 dni C:\archiwum .*ZIP-------------------------------------------------------
Get-ChildItem –Path $DestArchiwum -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-5))} | Remove-Item
Kopia na do katalogu C:\APP_BACKUP\ i na Serwer NAS-------------------------------------------------------
$NetworkPath = "\\192.168.1.3\backup\cumulus"
$UserAndDomain = "backup"
$pass = "xxxxxxxx" #hasło
Copy-Item -Path "C:\APP_BACKUP\*.zip" -Destination "C:\archiwum" -recurse -Force
New-SMBMapping -LocalPath 'S:' -RemotePath $NetworkPath -UserName $UserAndDomain -Password $pass
Copy-Item -Path "C:\APP_BACKUP\*.zip" -Destination "S:\" -recurse -Force
#Usówanie plików C:\APP_BACKUP\ .*ZIP-------------------------------------------------------
Get-ChildItem –Path $Destenation -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(0))} | Remove-Item
______________________________________________________________________________________________________________________
WERSJA z pętelką
# !!!!! zamiast wartości w sekcji #Call SQL Command wprowadzasz foreach i w zmiennych dodajesz listę baz danych $Database = 'BAZA1', 'BAZA2', 'BAZA3', ... ;
$ServerInstance = "CU01SQL\INSERTGT"
$Destenation = "C:\APP_BACKUP"
$Database = 'BAZA1', 'BAZA2', 'BAZA3', ... ;
foreach ($dbname in $Database)
{
Backup-SqlDatabase -ServerInstance $ServerInstance –Database $dbname -BackupFile "$Destenation\$dbname.bak" -PassThru
}
______________________________________________________________________________________________________________________
#Poziomy kompresji
-CompressionLevel Optimal
-CompressionLevel Fastest
-NoCompression
Opcjonalnie można użyć parametru -CompressionLevel z jedną z trzech wartości: Optimal, NoCompression lub Fastest.
Optimal jest ustawieniem domyślnym, jeśli parametr -CompressionLevel nie jest ustawiony;
używa najlepszej dostępnej kompresji, ale może to potrwać dłużej niż użycie najszybszej. Aby utworzyć archiwum bez kompresji, użyj wartości NoCompression.
#Description
The Compress-Archive
cmdlet creates a compressed, or zipped, archive file from one or more specified files or directories. An archive packages multiple files, with optional compression, into a single zipped file for easier distribution and storage. An archive file can be compressed by using the compression algorithm specified by the CompressionLevel parameter.
The Compress-Archive
cmdlet uses the Microsoft .NET API System.IO.Compression.ZipArchive to compress files. The maximum file size is 2 GB because there's a limitation of the underlying API.