cls import-module SQLPS Set-Variable Servername -Value "DD-VMP02-DB01" -Scope global Set-Variable SicherungsPfad -Value "E:\Sicherung\SQL" -Scope global Set-Variable SicherungsPfadTemp -Value $null -Scope global Set-Variable holedatum -Value (get-date -Format 'yyyyMMdd_HHmm') -Scope global Set-Variable SicherungsPfadFinal -Value "\\dd-sto01\f$\DD-STO01-A3\Backup\Computer\DD-VMP02-DB01\SQL\" -Scope global $dbs = Get-SqlDatabase -ServerInstance $Servername ####################################################################################################################### Function Backup-SQLDatabases { # Parameter definieren param( [parameter(mandatory=$true)] [validatecount(1, 10)] [string[]]$instanzen, [parameter(mandatory=$true)] [validatepattern("[A-Z]")] [validatecount(1,99)] #[validatecount(1, 9)] [string]$dbs ) $pfadzumbackup = $SicherungsPfad if(!(test-path -Path "$($pfadzumbackup)\$holedatum")){ try { new-item -path $pfadzumbackup -Name $holedatum -ItemType Directory -ErrorAction Stop | Out-Null Set-Variable SicherungsPfadTemp -Value "$($pfadzumbackup)\$holedatum" -Scope global } catch { write-host "Ordner für Backup konnte nicht erstellt werden" -ForegroundColor Yellow } } else{ write-host "Backup-Ordner existiert bereits" -ForegroundColor Yellow } # For-Schleife für mehrere Instanzen for($i = 0; $instanzen.count -gt $i; $i++){ write-host "Backup von der Datenbank $dbs auf der Instanz $($instanzen[$i]) wird erstellt" -ForegroundColor Yellow # Backup für remote Instanzen if($instanzen[$i] -ne $Servername -and !$instanzen[$i] -eq $false){ Write-host $args[1].Substring(1, 15) Write-Host $args[0] Invoke-Command -ComputerName $instanzen[$i].Substring(1, 15) -ScriptBlock { Backup-SqlDatabase -ServerInstance $args[1].Substring(1, 15) -Database $args[0] -BackupFile "$($args[2])\$($args[0]).bak" } -ArgumentList $dbs, $instanzen[$i], $pfadzumbackup, $holedatum } # Backup für eine lokale Instanz elseif($instanzen[$i] -eq $Servername -and !$instanzen[$i] -eq $false){ Backup-SqlDatabase -ServerInstance $instanzen[$i] -Database $dbs -BackupFile "$pfadzumbackup\$holedatum\$($dbs).bak" } else{ write-host "$($instanzen[$i]) existiert nicht" } } # ende von for-schleife } ####################################################################################################################### #Call backup task for every db #target must be online if (test-path -Path $SicherungsPfadFinal ) { FOREACH ($db in $dbs) { [string]$db = $db $db = ($db.replace("[","")) $db = ($db.replace("]","")) If ($db -ne "tempdb" -and $db -ne "master" -and $db -ne "model" -and $db -ne "msdb") { Write-Host "Sicherung von $db" Backup-SQLDatabases -instanzen $Servername -dbs $db } } ####################################################################################################################### #move dir incl. backup files to sto01 write-host $SicherungsPfadTemp Move-Item -Path $SicherungsPfadTemp -Destination $SicherungsPfadFinal -Force } Else { Write-Host "Target is offline!" }