Rufen Sie uns an
+41 71 508 14 51

Schreiben Sie uns
support@fixthis.ch

Öffnungszeiten
Mo-Fr: 08:00 - 20:00

logo-wide-120

Automatische Windows Sicherung mit Benutzerdefinierter Planung

Verfasst am: 11. März 2020  |  

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

#----------------------------------------------------------------------------------------------------------------------------------------#
# Braucht Win8 oder Server 2012 um fehlerfrei zu laufen!!!!!!
# Script by Internet
# V1.1 - 09.05.2014 - by KIM@fixthis.ch
#
# 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=”dummy@fixthis.ch”
$emailfrom=”dummy@fixthis.ch”
$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 :)"
        }
}

Brauchen Sie PC Support um Ihre Clients zu sichern und auf dem aktuellsten Stand zu halten? Wir beraten Sie zu einem fairen Stundensatz und zeigen Ihnen kostengünstige Lösungen per Fernwartung.

Logo
crosslist