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, 😉
#----------------------------------------------------------------------------------------------------------------------------------------#
# 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.