Jump to content

Powershell: Backupskript läuft nicht in Aufgabenplanung


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Forum,

 

dies ist mein erster Beitrag zuvor war ich nur anonymer Nutznieser.

 

Mein Problem:

 

Das folgende Powershellskript lässt sich via Aufgabenplanung ausführen, kommt aber nie zum Ende (es steht dann dauerhaft "wird ausgeführt" da) . Das Skript lässt sich in einer Admin Powershell starten und läuft dort problemlos durch (Export OK, Mailversand OK).

In der Aufgabenplanung wird das Skript wie folgt gestartet:

 

powershell.exe -ExecutionPolicy ByPass -command C:\Backup\Skripte\export.ps1

 

Der Fehler tritt erst seit der Änderung beim Mailversand auf (zuvor über lokales Relay ohne Auth) und lässt sich auf folgende Zeilen eingrenzen (wenn diese Zeilen auskommentiert sind läuft Skript in der Aufgabenplaung sauber durch - natürlich ohne Mail versand):

$smtpauthpw = Get-Content C:\Backup\Skripte\mailpwcrypted.txt | ConvertTo-SecureString
$smtpauthcred = New-Object System.Management.Automation.PSCredential "mail@domain.tld", $smtpauthpw
Send-MailMessage -encoding ([System.Text.Encoding]::UTF8) -SmtpServer $PSEmailServer -to $BackupMailTo -from $BackupMailFrom -Subject "Backup $BackupName $VMName" -Credential $smtpauthcred -body "Das Backup lieferte folgendes Ergebnis: `r`n Kunde: $BackupName `r`n Virtuelle Maschine: $VMName `r`n Backup Pfad: $BackupPath `r`n Backup Destination: $BackupDestination `r`n Backup Dauer: $BackupDuration `r`n Backup Datenmenge: $BackupSize GB`r`n"

Ich denke es handelt sich um ein Berechtigungsproblem, welches sich nicht über den ByPass schalter lösen lässt. Woran kann es noch liegen?

 

Einstellungen in der Aufgabenplanung:

 

Lokaler Administrator, erhöhte Rechte, Kennwort hinterlegt

 

 

Hier das komplette Skript:

#Variablen Definition inkl. Ausgabe
$BackupName = "Kunde1"
Write-Host $(Get-Date -f yyyy-MM-dd_HH:mm:ss): Kunde: $BackupName
$VMName = "TestVM"
Write-Host $(Get-Date -f yyyy-MM-dd_HH:mm:ss): Virtuelle Maschine: $VMName
$BackupPath = "E:\" #mit '\' am Ende
Write-Host $(Get-Date -f yyyy-MM-dd_HH:mm:ss): Backup Pfad: $BackupPath
$PSEmailServer = "host.domain.tld"
Write-Host $(Get-Date -f yyyy-MM-dd_HH:mm:ss): Mailserver: $PSEmailServer
$BackupMailTo = "mail@host.domain.tld"
Write-Host $(Get-Date -f yyyy-MM-dd_HH:mm:ss): Mailempfänger: $BackupMailTo
$BackupMailFrom = "backup@kundendomain.de"
Write-Host $(Get-Date -f yyyy-MM-dd_HH:mm:ss): Mailversender: $BackupMailFrom

#Zeitstempel Anfang
$BackupTimestampStart = Get-Date

#Definition Variable Pfad inkl. Ausgabe
$BackupStarttime = Get-Date -f _yyyy-MM-dd_HHmm
$BackupStarttimeString = $BackupStarttime.ToString()+"\"
$BackupDestination = "$BackupPath$VMName$BackupStarttimeString"
Write-Host $(Get-Date -f yyyy-MM-dd_HH:mm:ss): Backup Destination: $BackupDestination

#Alle Verzeichnisse im $BackupPath löschen welche mit dem $VMName beginnen
Write-Host $(Get-Date -f yyyy-MM-dd_HH:mm:ss): Alle Backupverzeichnisse der VM $VMName in $BackupPath löschen
rd -recurse -force "$BackupPath$VMName*"

#Backupverzeichnis anlegen
Write-Host $(Get-Date -f yyyy-MM-dd_HH:mm:ss): Backup Verzeichnis anlegen
md $BackupDestination | Out-Null

#Export starten
Write-Host $(Get-Date -f yyyy-MM-dd_HH:mm:ss): Starte Export von $VMName
#Export-VM -Name $VMName -Path $BackupDestination

Write-Host $(Get-Date -f yyyy-MM-dd_HH:mm:ss): Export von $VMName abgeschlossen

#Zeitstempel Ende
$BackupTimestampStop = Get-Date

#Dauer berechnen und ausgeben
$BackupDuration = ($BackupTimestampStop - $BackupTimestampStart)
Write-Host $(Get-Date -f yyyy-MM-dd_HH:mm:ss): Dauer des Backups: $BackupDuration
#Datenmenge berechnen und ausgeben
$BackupSize = 0
((gci $BackupDestination -Recurse -File) | % { $BackupSize += $_.Length / 1Gb })

#Mailversand vorbereiten
#Die Passwortdatei lässt sich mit folgendem Befehl anlegen (neu Powershell öffnen und eingeben, dann startet der Eingabedialog): (Get-Credential).password | ConvertFrom-SecureString > mailpwcrypted.txt
$smtpauthpw = Get-Content C:\Backup\Skripte\mailpwcrypted.txt | ConvertTo-SecureString
$smtpauthcred = New-Object System.Management.Automation.PSCredential "mail@domain.tld", $smtpauthpw
Send-MailMessage -encoding ([System.Text.Encoding]::UTF8) -SmtpServer $PSEmailServer -to $BackupMailTo -from $BackupMailFrom -Subject "Backup $BackupName $VMName" -Credential $smtpauthcred -body "Das Backup lieferte folgendes Ergebnis: `r`n Kunde: $BackupName `r`n Virtuelle Maschine: $VMName `r`n Backup Pfad: $BackupPath `r`n Backup Destination: $BackupDestination `r`n Backup Dauer: $BackupDuration `r`n Backup Datenmenge: $BackupSize GB`r`n"

Write-Host $(Get-Date -f yyyy-MM-dd_HH:mm:ss): Mail an $BackupMailTo versenden

Danke für eure Hilfe!


 Eine Anpassung auf Plaintext Passwort lässt das Skript durchlaufen, allerdings steht es dann im Klartext im Skript. Nich so gut:-)

$smtpauthpw = "supergeheimespasswort" | ConvertTo-SecureString -asPlainText -Force
$smtpauthcred = New-Object System.Management.Automation.PSCredential "mail@host.domain.tld", $smtpauthpw
Send-MailMessage -encoding ([System.Text.Encoding]::UTF8) -SmtpServer $PSEmailServer -to $BackupMailTo -from $BackupMailFrom -Subject "Backup $BackupName $VMName" -Credential $smtpauthcred -body "Das Backup lieferte folgendes Ergebnis: `r`n Kunde: $BackupName `r`n Virtuelle Maschine: $VMName `r`n Backup Pfad: $BackupPath `r`n Backup Destination: $BackupDestination `r`n Backup Dauer: $BackupDuration `r`n Backup Datenmenge: $BackupSize GB`r`n"
Link zu diesem Kommentar

Ohne es genau zu wissen kann es auch damit zusammenhängen, dass ein Start der Powershell den Schalter "-command C:\...ps1" in der dadurch geöffneten PowerShell-Sitzung als Textstring und nicht als auszuführende Skriptdatei behandelt (siehe Hilfe zur powershell.exe). Mit dem Command-Schalter musst du noch ein "&" davor setzen: "-command "& C:\...ps1".

 

Ich habe gute Erfahrungen über die Aufgabenplanung gemacht wenn ich den Aufruf so gemacht habe (und bevorzuge auch diese Methode, weil sie lesbarer ist):

 

powershell.exe -ExecutionPolicy ByPass -File C:\Backup\Skripte\export.ps1

 

Probier das mal. Vielleicht hilft es. :)

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...