Fragensteller
Frage zu einem Backup-Skript (Powershell-Neuling)

Allgemeine Diskussion
-
Hallo,
ich habe ein Backup-Skript im Internet gefunden, und dieses auf meine Bedürfnisse angepasst. Kurze Erklärung: Das Skript soll erst ein vorhandenes Backup-Template starten, welches ein Backup auf eine NAS macht, die per iSCSI an den Server (VM auf einem Hyper-V) angebunden ist. Sobald dieser Job abgeschlossen ist, soll ein Backup auf die am NAS-Storage angebundene USB-Platte durchgeführt werden.
Das Problem, welches ich habe, wenn ich das Backup-Template im Skript aufrufe, soll powershell eigentlich warten, bis das fertig ist, und erst dann weiter machen, dies mache ich mit start process wbadmin start backup... -wait. Allerdings scheint das Argument -wait nicht zu klappen, da das Skript sofort weitermacht und dann sofort das nächste Backup auf die USB-Platte machen möchte. Das bricht dann aber ab, da ja noch das erste Backup läuft
Was mache ich falsch?
# Windows Server Backup on NAS and USB Hard disk
############# Costants #############
$mailServer = "mailserver"
$mailFrom = "NASbackup.domain.com"
$mailTo = "julian@domain.com"
$BackupDir = "\\NASStorage\usbshare1"
$ValidPath = Test-Path -Path $BackupDir
$wbadminPath = "c:\Windows\System32"
$templid = "{cae4f110-fc0c-4c68-9232-f9482838e859}"Write-Host $templid
Start-Process "$wbadminPath\wbadmin.exe" -ArgumentList "start backup -quiet -templateId:{cae4f110-fc0c-4c68-9232-f9482838e859}" -WaitIf ($ValidPath -eq $True) {$BackupDir = "\\NASStorage\usbshare1"}
Else {$BackupDir = "\\NASStorage\usbshare2"}Write-Host $BackupDir
############# Backup #############
# add Windows Server Backup snap-in
if((get-pssnapin windows.serverbackup -ErrorAction SilentlyContinue) -eq $null)
{add-pssnapin windows.serverbackup}# create daily backup folder
$DayofWeek = (get-date).DayOfWeek
$BackupDir = "$BackupDir\$DayOfWeek"
if(!(test-path $BackupDir -pathtype container))
{new-item $BackupDir -type directory}$policy = New-WBPolicy
# files (not used)
# $fileSpec = New-WBFileSpec -FileSpec <nome_file>
# Add-WBFileSpec -Policy $policy -FileSpec $filespec
# C volume
$volume = Get-WBVolume -VolumePath C:,D:
Add-WBVolume -Policy $policy -Volume $volume# system state and bare metal recovery
Add-WBSystemState $policy
Add-WBBareMetalRecovery $policy
$backupLocation = New-WBBackupTarget -NetworkPath $BackupDir
Add-WBBackupTarget -Policy $policy -Target $backupLocation# Backup-Exclusions
$filespec1 = New-WBFileSpec -FileSpec D:\TEMP -Exclude
Add-WBFileSpec -Policy $policy $filespec1
Set-WBVssBackupOptions -Policy $policy -VssCopyBackup# execute backup
Start-WBBackup -Policy $policy############# Send email #############
$mailTitle = "Windows Server Backup $env:computername"
$mailBody = "get-wbjob -previous 2"$mailClient = new-object Net.Mail.SmtpClient -arg $mailServer
$mailClient.Send($mailFrom, $mailTo, $mailTitle, $mailBody)vielen Dank für Eure Hilfe!
Julian
- Typ geändert Raul TalmaciuMicrosoft contingent staff Montag, 2. April 2012 09:40 Warten auf Feedback
Alle Antworten
-
Wenn du mit Server einen Windows Server 2008 R2 meinst, dann solltest du statt der wbadmin.exe die
<Windows Server Backup Cmdlets in Windows PowerShell> nutzen.
http://technet.microsoft.com/de-DE/library/ee706683.aspx
wbadmin.exe startet einen Job (Prozess)!!!!!!
Wenn nicht, schau dir mal die Ausgabe von folgendem Befehl an: ;-))
wbadmin /?
Und dann schau hier !
http://trevorsullivan.net/2011/12/30/checking-status-of-a-windows-7-system-image/
folgender Aufruf ist die Lösung
wbadmin.exe get status
Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' ' -
Hi Peter,
ja, ich habe eine 2008 R2 (sorry, hatte ich vergessen mit anzugeben). Mir ist es aber nicht gelungen mit den Backup Cmdlet in Windows Powershell einen Backup-Job mittels Template-ID zu starten! Oder habe ich das nur überlesen...?
Und meine zweite Frage ist, wie muss ich denn den wbadmin get status in mein Backup-script einbauen, habe obiges Skript mal mit diesen Zeilen aktualisiert, aber funktioniert nicht, er macht dann gleich weiter, und fällt mit dem nächsten Backup auf die USB-Platte auf die Nase...
Start-Process "$wbadminPath\wbadmin.exe" -ArgumentList "start backup -quiet -templateId:{cae4f110-fc0c-4c68-9232-f9482838e859}"
Start-Process "$wbadminPath\wbadmin.exe" -ArgumentList "get status" -Wait- Bearbeitet Julian79 Dienstag, 13. März 2012 16:51
-
Ich kenne mich mit den WB-backups nicht aus !
Ich habe mich aber nun ein wenig belesen und verstehe das so:
Das Template ist ein Policy
Der Parameter -TemplateID ist nichts anderes als ein (Spezieller) Scheduled-Task der dann das Backup mit der Policy über eine GUID aufruft.
In addition, you can use the Local Group Policy Editor snap-in (Gpedit.msc) to allow or disallow certain types of backups or backup locations.
Policy settings for Windows Server Backup are located at: Local Computer Policy\Computer Configuration\Administrative Templates\Windows Components\Backup\Server.
http://forum.wegotserved.com/index.php/topic/19082-server-backup-solving-the-2tb-limit/
Da nun der Task-Sheduler-Dienst alles in der Hand hat kommst du an deinen Job nicht mehr heran.
(Fire and forget…) Da hilft dir auch kein get status !
Vergiss das mit dem Template und erstelle dir dein „eigenes“!
Deshalb empfehle ich die folgende Vorgehensweise:
Erstelle mit den WB Backup comandlets eine script mit dem du das Backup und deine anderen Aufgaben erledigst (Backup.ps1).
In dem Script kannst du beide Backups nacheinander erstellen.
Für diese Script erstellst du einen Sheduled-Task in dem das Script aufgerufen wird:
PowerShell.exe –command c:\pfad\zum\script\backup.ps1
http://certcollection.org/forum/topic/99672-windows-server-2008-r2-and-windows-backup/
http://richardspowershellblog.wordpress.com/2008/01/11/powershell-for-windows-server-backup/
Mehr kann ich dir leider nicht helfen!Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' ' -
Hi Peter,
ich habe es jetzt zum Laufen bekommen. Ich musste jeweils ein "-wait" einbauen:
Start-Process "$wbadminPath\wbadmin.exe" -ArgumentList "start backup -quiet -templateId:{cae4f110-fc0c-4c68-9232-f9482838e859}" -Wait
Start-Process "$wbadminPath\wbadmin.exe" -ArgumentList "get status" -WaitDann funktioniert es sauber! Aber dein Ansatz ist auch nicht so verkehrt!
Letze aber nun wirklich einfache Frage (du weisst ja, bin ein Powershell-Neuling):
Wenn das Backup abgeschlossen ist, lass ich mir den Output der letzten beiden Backups per Email senden, das geht mit folgendem Befehl:
############# Send email #############
$mailTitle = "Windows Server Backup $env:computername"
$mailBody = "get-wbjob -previous 2"$mailClient = new-object Net.Mail.SmtpClient -arg $mailServer
$mailClient.Send($mailFrom, $mailTo, $mailTitle, $mailBody)In der Email bekomme ich aber statt dem Output des "get-wbjob -previous 2" nur eben den Befehl selbst also "get-wbjob -previous 2" angezeigt!
Ist ne echte Anfänger-Frage, ich weiss... :-)
-
Wie in der Mathematik Klammern werden von innen nach aussen ausgeführt (innerste klammer zuerst).
Damit das ergebnis das die Klammer herstellt weitergegeben werden kann das Dollarzeichewn voranstellen.
Siehe Get-Help about_Operators
Teilausdruckoperator:
$ () Beschreibung: Gibt das Ergebnis einer oder mehrerer Anweisungen zurück. Gibt einzelne Ergebnisse als Skalar zurück. Gibt mehrere Ergebnisse als Array zurück. Beispiele: $($x * 23) $(Get-WMIObject win32_Directory)$mailBody = $(get-wbjob -previous 2)
Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' ' -
habe das "$mailBody = $(get-wbjob -previous 2)" in meinen Job eingebaut, aber immer noch das gleiche Problem, in der Email steht nun:
Microsoft.Windows.ServerBackup.Commands.WBJob
Microsoft.Windows.ServerBackup.Commands.WBJob
Und nicht der Output! :-( -
get-wbjob kann auch nicht funktionieren da es nur den Status des aktuell laufenden Jobs ausliest!
http://technet.microsoft.com/en-us/library/ee706654.aspx
WBadmin.exe schreibt ein Log File in : "C:\Windows\Logs\WindowsServerBackup"
Das kannst du mit Get-Content in deinen Mailbody einlesen.
Ich konnte nicht herausbekommen wo Start-WBBackup sein Log File anlegt oder wie man eines macht.
Ich nehmen mal an das Start-WBBackup auch ein Log im selben Pfad anlegt.
Mehr kann ich dir dazu nicht helfen… wie gesagt, ich habe noch nie ein backup gemacht.
Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '- Bearbeitet Peter Kriegel Mittwoch, 14. März 2012 14:46
-
Bist du hier zwischenzeitlich weitergekommen, Julian?
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort". -
Hallo Julian,
mach Dir eine Schleife in der das eigendliche Backup-Script aufgerufen wird.
$x = get-content "c:\listederzusicherndenserver.txt"
Foreach ($i In $x)
{
invoke-command -filepath c:\sicherung.ps1 -computername $i
}dann noch zu den Logs, wenn Du in Deinem Backup-Script die Ausgabe in eine Datei leitest (Datum und Servernamen in den Dateinamen) bekommst Du die volle Übersicht in Prozent und den Abschluss.
Im Ereignisprotokoll "WindowsServerBackup"
27.07.2011 20:07:41 Microsoft-Windows-Backup 14 Die Sicherung ist abgeschlossen.
27.07.2011 20:07:41 Microsoft-Windows-Backup 4 Die Sicherung wurde erfolgreich abgeschlossen.
27.07.2011 20:00:15 Microsoft-Windows-Backup 1 Die Sicherung wurde gestartet.Gruß
Armin