Windows Backup ist super!

Denn mit diesem Skript könnt ihr sichern wie mit einem teuren Sicherungsprogramm. Es verschickt E-Mails mit dem Status der Sicherung, oder mit einer Fehlermeldung, falls etwas nicht stimmt. Keine Garantie! Da, jeder selber für seine Skripts verantwortlich ist :)

Im Skript befindet sich eine XML Datei. Diese bildet einen Windows Task ab, den man über die Aufgabenplanung erstellen kann. Ist die Aufgabe erstellt, kann man sie ganz bequem als XML exportieren und in das Skript einfügen, um das Skript danach auf weiteren Servern oder Computern einfügen zu können, ohne noch mühsam einen Task einzurichten ;-)

Das Skript wird nich vollständig im Browser angezeigt. Der XML Code fehlt, da er vom Browser falsch interpretiert wird. Deshalb hier ein Link zum vollständigen Skript: ps-win-backup.txt

Das Skript


#----------------------------------------------------------------------------------------------------------------------------------------#
# Braucht Win8 oder Server 2012 um fehlerfrei zu laufen!!!!!!
# Script by Internet
# V1.1 - 09.05.2014 - by [email protected]
#
# Schritt 1: - Variablen unten anpassen
# Schritt 2: - Powershell öffnen und folgendes ausführen:set-executionpolicy remotesigned
#            - Die Änderung bestätigen
# Schritt 3: - Dieses Script in der Powershell ("als Administratorausführen") ausführen
#
# Weiteres:  - Der Task wird mit einem XML File erstellt. Dieses Kanneinfach von einem Bestehenden Task exportiert und angepasst werden.
#              Zu finden unter dem Kommentar "
#Generiere XML zum Import inTaskmanager"
#              Achtung! Variablen im XML
#
# Neuerungen   V1.1 09.05.2014: - Tägliche Sicherung in jeweils anderenOrdner
#                               - Monatsbackup hinzugefügt
#----------------------------------------------------------------------------------------------------------------------------------------#

# Variablen -------------------------------------------------------------------
$user="user"
$password="passwort"
$backupStartDate="2014-05-08T"
$backupStartTime="00:00:00"
#$backupSaveDays=('
          
          
          
          
          
          ')
$emailto=”[email protected]”
$emailfrom=”[email protected]”
$day=(get-date -f dd-MM-yyyy)
$dayName=(get-date -uformat %A)
$hname=hostname
$backuplocation="d:\"
$backupUNC="\\localhost\D$\"
$tName="Backup"
$emailserver="x.x.x.x"
$filePath="C:\Scripts\backup.ps1"
$domain = Get-ADDomain
$userComplete = ($domain.Name + "." + $Domain.NetBIOSName + "\" + $user)



# ENDE Variablen --------------------------------------------------------------

# Windows Server Backup Feature installieren
$srv=Get-WindowsFeature *backup*
if (!$srv.Installed)
{
    Import-Module Servermanager
    Add-WindowsFeature -Name Windows-Server-Backup -Restart:$false
}

# Teste ob Backupscript am definierten Ort vorhanden ist
$path = $PSCommandPath
if (Test-Path $filePath)
{
    echo "Script is already in the defined path"
}
else
{
    mkdir C:\Scripts
    copy $path $filePath
}

$taskAviable = @(Get-ScheduledTask -TaskName "Backup").Count # Wenn 1 dannist der Task da, wenn ein anderer Output kommt, nicht. | out-null

if($taskAviable -eq "1")
{
    function SendEmail($To, $From, $Subject, $Body, $attachment, $smtpServer)
    {
            Send-MailMessage -To $To -Subject $Subject -From $From -Body $Body -Attachment $attachment -SmtpServer $smtpServer
    }

    function Out-FileForce {
    PARAM($backuplocation)
    PROCESS
    {
        if(Test-Path $backuplocation)
        {
            Out-File -inputObject $_ -append -filepath $backuplocation
        }
        else
        {
            new-item -force -path $backuplocation -value $_ -type file
        }
    }
    }

    if(-Not (Test-Path ($backuplocation + "Monatsbackup")))
        {
            mkdir ($backuplocation + "Monatsbackup")
        }
    if(-Not (Test-Path ($backuplocation + (get-date -uformat %A))))
        {
            mkdir ($backuplocation + (get-date -uformat %A))
        }


    #Am 1. Tag jedes Monats wird ein Monatsbackup gemacht
    if ((get-date -uformat %A) -eq "01")
        {
            $backupUNC = ($backupUNC + "Monatsbackup")
        }
    else
        {
            #Jeder Wochentag sichert in anderen Ordner
            $backupUNC = ($backupUNC + (get-date -uformat %A))
        }
    $backuplog=$hname.log

    Write-Output ("———————– Backup wurde gestartet am – $(Get-Date –f o)————————-") | Out-FileForce "$backuplog"
    Write-Output ("———————– Diese Mail stammt von $hname ————————-") | Out-File "$backuplog" -Append
    $Error.Clear()
    wbadmin start backup -backupTarget:$backupUNC -include:c: -allCritical -vssFull -quiet | Out-FileForce "$backuplog"
    if(!$?)
        {
            Write-Output ("———————– Es ist ein Fehler aufgetreten. Bitteüberprüfen! – $(Get-Date –f o) ————————-") | Out-File "$backuplog" -Append
            Write-Output ("———————– Diese Mail stammt von $hname ————————-") | Out-File "$backuplog" -Append
            SendEmail -To "$emailto" -From "$emailfrom" -Subject "backupfailed" -Body "Das Backup ist fehlgeschlagen. Bitte überprüfedie angehängte Logdatei." -attachment "$backuplog" -smtpServer "$emailserver"
            break

        }

    Write-Output ("———————– Alles OK! – $(Get-Date –f o) ————————-") | Out-File "$backuplog" -Append
    Write-Output ("———————– Diese Mail stammt von $hname ————————-") | Out-File "$backuplog" -Append
    #SendEmail -To "$emailto" -From "$emailfrom" -Subject "backup $hnameok" -Body "Das Backup war erfolgreich!" -attachment "$backuplog" -smtpServer "$emailserver" .
}
else
{
    $hostname = hostname
    #Task ist nicht vorhanden und muss neu erstellt werden


    #Generiere XML zum Import in Taskmanager
    $jobXML = ('

    
        Lipp\admin
        Backup auf lokale Festplatte
    
    
        
        '+$backupStartDate+$backupStartTime+'
        PT8H
        true
      
        1
      
        
    
    
        
        '+$UserComplete+'
        Password
        HighestAvailable
        
    
  
    IgnoreNew
    true
    true
    true
    false
    false
    
      true
      false
    
    true
    true
    false
    false
    false
    false
    false
    P3D
    7
  
  
    
      powershell.exe
      "C:\Scripts\backup.ps1"
    
  
    ')

    #schtasks /create /xml "C:\Scripts\backup.xml" /tn "Backup" /ru
($hostname+'\_admin0') /rp *
    $Error.Clear()
    Register-ScheduledTask -Xml $jobXML -TaskName "Backup" -User $userComplete -Password $password –Force | out-null

    if(!$?)
        {
            echo "Es ist ein Fehler augetreten. Bitte Logindaten überprüfen: User=$user Passwort=$password"
        }
    else
        {
            echo "Backupkonfiguration fertig :)"
        }
}

Hilfe benötigt? Günstigen Support gibts bei www.fixthis.ch