none
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

    Dienstag, 13. Februar 2018 14:55

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.

    Dienstag, 13. Februar 2018 15: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.

    Dienstag, 13. Februar 2018 15: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?
    Dienstag, 13. Februar 2018 15:39
  • 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

    Dienstag, 13. Februar 2018 16:19