looser27
Goto Top

Powershell Skript bleibt in Aufgabenplanung hängen

Guten Tag werte Kollegen,

ich habe ein kleines Powershell-Skript, welches bei einzelnem Aufruf auch problemlos macht, was es soll (alte Dateien löschen und neue Dateien kopieren).
Packe ich das Skript aber in die Aufgabenplanung, so bleibt das Skript auf "Wird ausgeführt" hängen.

Das Skript sieht so aus:
$Quelle = "D:\Backups\VeeamConfigBackup\DC01\"  
$Ziel = "\\server\backup\VeeamConfigBackup\DC01"  
$Zeit = ((Get-Date).AddDays(-10)).Date
$Heute = (Get-Date).Date

#Skript

Get-ChildItem $Ziel -Recurse | where {$_.LastWriteTime -lt $Zeit} | Remove-Item -force
Get-ChildItem $Quelle | where {$_.LastWriteTime -gt $Heute} | Copy-Item -Destination $Ziel

Der Aufruf des Skriptes erfolgt analog zu einem bereits funktionierenden Skript.
Es scheint also am Design des Skriptes zu liegen, dass dieses nicht beendet wird.

Da ich nicht der PowerShell-Experte bin, hoffe ich auf einen Hinweis, was ich am Skript noch ändern muss.

Gruß

Looser

Content-Key: 1129777463

Url: https://administrator.de/contentid/1129777463

Printed on: April 25, 2024 at 11:04 o'clock

Mitglied: 149062
149062 Aug 06, 2021 updated at 14:50:41 (UTC)
Goto Top
Wie immer bei sowas einfach erst mal die Probleme loggen lassen mittels
Start-Transcript "D:\script.log"  
 #...... hier das Script
Stop-Transcript
(Beachten das der Account unter dem das Script läuft auch Schreibrechte in den Logordner hat)

Dann sieht man schwarz auf weiß was Sache ist.

In der Regel sind das meist Berechtigungsprobleme wenn Scripte in der Aufgabenplanung nicht laufen. Gerade wenn man hier auf Shares mit dem falschen Account zugreift. Oft lässt man Skripte als LocalSystem laufen, vergisst aber dann in den Share- und NTFS Berechtigungen die ACLs für den Computeraccount hinzuzufügen, bzw. die Authentifizierten Benutzer.

} | Copy-Item -Destination $Ziel
Das sollte zwar nicht dazu führen das das Skript anhält, führt aber ohne den Parameter -Force dazu das bestehende Dateien nicht überschrieben werden und ein Fehler generiert wird wenn eine Datei/Ordner mit dem selben Namen bereits existiert.

/evo
Member: Looser27
Looser27 Aug 06, 2021 updated at 15:09:29 (UTC)
Goto Top
Hab ich gemacht:

Log-Auszug:

Die Aufzeichnung wurde gestartet. Die Ausgabedatei ist "D:\script.log".  
**********************
Ende der Windows PowerShell-Aufzeichnung
Endzeit: 20210806170418
**********************

Also kein erkennbarer Fehler. Der verwendete Account hat die benötigten Berechtigungen. Führe ich das Skript manuell als eben dieser User aus, funktioniert es auch, wie erwartet.
Die Aufgabe bleibt trotzdem bei "Wird audgeführt" hängen, obwohl im Verlauf der Aufgabe steht:
Die Aufgabenplanung hat die Instanz "{4e7009d7-2f6b-4d5c-87d3-efd793c3d6fd}" der Aufgabe "\VeeamConfig kopieren und alte löschen" für den Benutzer "TollerUsermitBerechtigung" erfolgreich fertig gestellt.  
Mitglied: 149062
Solution 149062 Aug 06, 2021 updated at 15:13:48 (UTC)
Goto Top
Zitat von @Looser27:
Also kein erkennbarer Fehler.
Na dann läufts ja. Wenn Stop-Transcript erreicht wurde ist das Skript ja durchgelaufen und nicht gehangen ...
Der verwendete Account hat die benötigten Berechtigungen. Führe ich das Skript manuell als eben dieser User aus, funktioniert es auch, wie erwartet.
Woran siehst du das es nicht läuft? Hast du die Taskliste geprüft ob der PS Prozess wirklich noch läuft. Nimm mal einen lokalen Ordner mit Testdaten und lass es darauf los.
Die Aufgabe bleibt trotzdem bei "Wird audgeführt" hängen, obwohl im Verlauf der Aufgabe steht:
Taskmanager prüfen , dort siehst du wirklich ob der PS Prozess noch läuft. Der Taskmanager verarscht einen oftmals mit dem Status.

Und auch alle CMDLets mal mit dem -Verbose Parameter erweitern.
Member: Looser27
Looser27 Aug 06, 2021 at 15:23:01 (UTC)
Goto Top
Es funktioniert:

Der Fehler war anscheinend das fehlende -verbose.

Hier der Vollständigkeit das Skript, wie es jetzt funktioniert:
$Quelle = "D:\Backups\VeeamConfigBackup\DC01\"  
$Ziel = "\\server\backup\VeeamConfigBackup\DC01"  
$Zeit = ((Get-Date).AddDays(-10)).Date
$Heute = (Get-Date).Date

#Skript
Start-Transcript "D:\script.log"  
Get-ChildItem $Ziel -Recurse -verbose | where {$_.LastWriteTime -lt $Zeit} | Remove-Item -force
Get-ChildItem $Quelle -verbose | where {$_.LastWriteTime -gt $Heute} | Copy-Item -Destination $Ziel -force
Stop-Transcript
Mitglied: 149062
149062 Aug 06, 2021 updated at 15:31:46 (UTC)
Goto Top
Zitat von @Looser27:

Es funktioniert:

Der Fehler war anscheinend das fehlende -verbose.
Nää ganz bestimmt nicht, der -Verbose Parameter ist nur zur Anzeige auf der Konsole was passiert, das ändert rein gar nichts an der Funktionsweise des Skriptes an sich!
Das ohne diesen Parameter nichts angezeigt wird ist völlig normal bei copy-item und remove-item, die zeigen nichts an wenn erfolgreich, das bedeutet auch nicht das es nicht funktioniert wenn nichts zu sehen ist ...
Member: Looser27
Looser27 Aug 09, 2021 at 05:55:43 (UTC)
Goto Top
Du hast natürlich Recht.....es war eine Kleinigkeit....
Das in der 2. Zeile fehlende -Force war die Ursache.
Trotzdem danke.