none
Powershell Script schützen beim Logoff RRS feed

  • Frage

  • Hallo Powersheller!

    Ich habe ein Script, dass solange der User angemeldet ist läuft und beendet wird sobald der User sich abmeldet. Leider wird das Script dann nicht sauber beendet, weil der Logoff vorgang dazwischen kommt.

    Gibt es die Möglichkeit entweder:

    - einen Timeout in den logoff vorgang einzubauen, sodass das script noch die zeit hat sauber zu beenden oder

    - das Script so zu schützen, dass der Logoff vorgang sich entsprechend verzögert?

    Das Script läuft auf einem Windows Server 2012R2

    Vielen Dank vorab!

    Freitag, 12. Februar 2016 09:12

Antworten

  • Also, im Gegensatz zu Raimund kann ich mir durchaus etliche Szenarien vorstellen, in denen Scripte permanent im Hintergrund laufen. :)

    Ohne das Script zu sehen, ist die Frage aber nur allgemein zu beantworten.
    Generell kannst du es mit den Systemevents versuchen:

    Function FnCleanUp {
        # Befehle z. ordentlichen Beenden des Scripts
    }

    $sysevent = [microsoft.win32.systemevents]
    Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnding" -Action { FnCleanUp }
    Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnded" -Action { FnCleanUp }

    Hat dein Script aber eine GUI (Winforms oder WPF) gibt es u.U. eine bessere Methode.

     
    In jedem Fall, sieh zu, das du innerhalb von FnCleanUp dann gut aufräumst, d.h. alle Jobs, Eventsubscriptions, Timer etc. korrekt beendest, sonst wirds nicht gehen.
     

    Grüße, Denniver

     

    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Freitag, 12. Februar 2016 12:38
    Moderator

Alle Antworten

  • Hi,

    was soll denn das Script machen, daß es so lange laufen muß? Gibt es einen alternativen Ansatz, das gewünschte Ergebnis zu erzielen?

    Auch wenn das gehen würde, halte ich die Vorgehensweise für nicht empfehlenswert.


    -Raimund

    Freitag, 12. Februar 2016 12:00
  • Also, im Gegensatz zu Raimund kann ich mir durchaus etliche Szenarien vorstellen, in denen Scripte permanent im Hintergrund laufen. :)

    Ohne das Script zu sehen, ist die Frage aber nur allgemein zu beantworten.
    Generell kannst du es mit den Systemevents versuchen:

    Function FnCleanUp {
        # Befehle z. ordentlichen Beenden des Scripts
    }

    $sysevent = [microsoft.win32.systemevents]
    Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnding" -Action { FnCleanUp }
    Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnded" -Action { FnCleanUp }

    Hat dein Script aber eine GUI (Winforms oder WPF) gibt es u.U. eine bessere Methode.

     
    In jedem Fall, sieh zu, das du innerhalb von FnCleanUp dann gut aufräumst, d.h. alle Jobs, Eventsubscriptions, Timer etc. korrekt beendest, sonst wirds nicht gehen.
     

    Grüße, Denniver

     

    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Freitag, 12. Februar 2016 12:38
    Moderator