Simeonitron 0 Geschrieben 30. September 2015 Melden Teilen Geschrieben 30. September 2015 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" Zitieren Link zu diesem Kommentar
tesso 375 Geschrieben 30. September 2015 Melden Teilen Geschrieben 30. September 2015 Das Problem wird das Passwort in der gespeicherten Datei sein. IMHO kann nur der User der die Datei angelegt hat, das das darin gecryptete Passwort auch wieder lesen. Zitieren Link zu diesem Kommentar
Simeonitron 0 Geschrieben 30. September 2015 Autor Melden Teilen Geschrieben 30. September 2015 Danke für den Hinweis! Das Passwort wurde mit folgenden Befehlen im lokalen Administrator (Welcher auch in der Aufgabenplanung hinterlegt ist) erstellt: (Get-Credential).password | ConvertFrom-SecureString > mailpwcrypted.txt Zitieren Link zu diesem Kommentar
MurdocX 950 Geschrieben 2. Oktober 2015 Melden Teilen Geschrieben 2. Oktober 2015 Um den Fehler abzufangen kannst du es mit Try,Catch probierten try { # Befehle... } catch { $Fehler = "Fehler; Zeile: $($_.InvocationInfo.ScriptLineNumber); $_" Write-Host $Fehler out-file -FilePath PFAD -Append -Encoding utf8 -InputObject $Fehler } Zitieren Link zu diesem Kommentar
TPaul 0 Geschrieben 6. Oktober 2015 Melden Teilen Geschrieben 6. Oktober 2015 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. :) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.