Benutzer mit den meisten Antworten
EventListener startet nicht

Frage
-
Ich habe folgenden PowerShell Code:
# Source Pfad festlegen $Sourcepath = "C:\install" # Watcher objekt erstellen $watcher = [System.IO.FileSystemWatcher]::new() $watcher.IncludeSubdirectories = $true $watcher.Path = $Sourcepath $watcher.EnableRaisingEvents = $true # Aktionen festlegen $action = { $event | fl * $event.sourceeventargs | fl * } $create = Register-ObjectEvent $watcher Created -Action $action -SourceIdentifier FileErstellt
Dies sollte einen FileSystemWatcher Eventlistener starten. Leider startet dieser aber nie. Siehe hier:
PS Z:\Powershell-Scripts> $create Id Name PSJobTypeName State HasMoreData Location Command -- ---- ------------- ----- ----------- -------- ------- 9 FileErstellt NotStarted False ...
State ist immer auf "NotStarted". Ich habe das in PowerShell, PowerShell als Admin und PowerShell ISE versucht. der EventListener startet nie.
Wie bringe ich diesen auf gestartet?
Meine PSVersion ist 5.1.14393.1944 auf Windows 10 Pro build 14393
Antworten
-
Das Problem wird wohl sein, wenn dein Script sich beendet wird der Listener wieder gestoppt.
https://blogs.technet.microsoft.com/heyscriptingguy/2011/06/16/use-asynchronous-event-handling-in-powershell/
Wenn du nicht wenigstens per wait-event in einer Schleife wartest, passiert auch nichts.
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Donnerstag, 15. Februar 2018 21:28
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 16. Februar 2018 22:30
Alle Antworten
-
Das Problem wird wohl sein, wenn dein Script sich beendet wird der Listener wieder gestoppt.
https://blogs.technet.microsoft.com/heyscriptingguy/2011/06/16/use-asynchronous-event-handling-in-powershell/
Wenn du nicht wenigstens per wait-event in einer Schleife wartest, passiert auch nichts.
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Donnerstag, 15. Februar 2018 21:28
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 16. Februar 2018 22:30
-
nein das kann nicht sein, da ich das skript in der konsole startet und sich diese nicht beendet. Ich habe jedoch gemerkt, dass der job doch startet, aber weil ich einen output erwartet habe, dachte ich der startet gar nicht! Sieht so aus als bekomme ich nur output, wenn ich Write-Host einsetze. Write-Host ($event | fl *) funktioniert und nur $event | fl * funktioniert nicht. Hast du eine Ahnung wieso? Eventuell etwas mit Scopes?
-
Schau dir in obigem Link mal genau das Schema an.
Events arbeiten grundsätzlich asynchron. Da aber die PS ebenso wie andere Scriptsprachen von der Tendenz keine Parallelarbeit kennt, muss man eben mit wait-event auf Ereignisse warten.
Diesen kann man noch mit Timeout ergänzen um ggf. zu einem normalen Programmende zu kommen.
Hier findest du auch Beispiele und weiterführende Links:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/wait-event?view=powershell-6