Wie man in Windows ein Skript ausführt, wenn ein bestimmtes Programm geöffnet oder geschlossen wird.

Das ist ziemlich nützlich, wenn man Aktionen beim Start bestimmter Programme automatisieren möchte. Beispielsweise könnte man ein Skript ausführen lassen, sobald jemand Notepad oder eine andere Anwendung öffnet. Die Einrichtung ist allerdings etwas umständlich – vor allem, wenn man sich mit Gruppenrichtlinien oder der Ereignisanzeige nicht so gut auskennt. Sobald es aber funktioniert, ist es ziemlich praktisch, da man benachrichtigt wird oder bei jedem Prozessstart eine Aktion automatisieren kann.

Da Windows keine einfache Funktion zum Benachrichtigen beim Öffnen von Notepad bietet, müssen Sie die Überwachungsrichtlinien anpassen und diese mit der Aufgabenplanung oder PowerShell verknüpfen. Nicht ganz einfach, aber durchaus machbar, wenn Sie die Schritte befolgen. Beachten Sie, dass Sie im Prinzip die Ereignis-ID 4688 auf neue Prozesse überwachen und anschließend nach Notepad oder dem gewünschten Programm filtern.

Wie man in Windows verfolgt, wann ein Programm gestartet wird und eine Aktion auslöst

Wirklich? Sie möchten App-Starts protokollieren und Aktionen automatisch ausführen? So geht’s.

Aktivieren der Prozessverfolgung in lokalen oder Domänengruppenrichtlinien

  • Zuerst müssen Sie Überwachungsrichtlinien aktivieren, um die Prozesserstellung zu protokollieren. Gehen Sie zu Computerkonfiguration > Windows-Einstellungen > Sicherheitseinstellungen > Lokale Richtlinien > Überwachungsrichtlinie. Wenn Sie auf einem Domänencomputer arbeiten, verwenden Sie die Gruppenrichtlinien-Verwaltungskonsole (GPMC) mit gpmc.msc.
  • Suchen Sie nach der Option „Prozessverfolgung“. Doppelklicken Sie darauf und stellen Sie sie auf „Erfolgreich“. Dadurch protokolliert Windows jeden erstellten Prozess.
  • Nicht vergessen: Ein wichtiger Schritt – führen Sie den gpupdate /forceBefehl in der Eingabeaufforderung oder PowerShell aus, um das Richtlinienupdate sofort zu übertragen. Das ist hilfreich, wenn Sie ungeduldig sind und schnell testen möchten.

Sobald dies abgeschlossen ist, beginnt Windows, Einträge mit der Ereignis-ID 4688 im Sicherheitsprotokoll zu protokollieren – Sie wissen schon: „Ein neuer Prozess wurde erstellt“.Die Ereignisse zeigen an, wer ihn gestartet hat, worum es sich handelte und welcher Prozess ihn aufgerufen hat (übergeordneter Prozess).

In manchen Fällen kann es bei bestimmten Konfigurationen erforderlich sein, den Rechner neu zu starten oder sich ab- und wieder anzumelden, damit die Richtlinienänderung wirksam wird.

Diese Prozessereignisse mit PowerShell filtern

  • Als Nächstes möchten Sie nur die Startvorgänge von beispielsweise Notepad anzeigen. Hier ist ein praktischer PowerShell-Codeausschnitt:
Get-WinEvent -FilterHashtable @{ LogName = 'Security'; ID = 4688 } | Select-Object TimeCreated, @{name='NewProcessName';expression={ $_. Properties[5].Value }}, @{name='User';expression={ $_. Properties[1].Value }} | Where-Object { $_. NewProcessName -like "*notepad.exe*" }
  • Dieser Befehl filtert die Starts von Notepad heraus. Er erfasst die Ereignisse bei der Prozesserstellung, ermittelt Zeitstempel, Prozessname und Benutzer und filtert anschließend nach Notepad.
  • Äußerst nützlich, denn jetzt haben Sie ein Protokoll darüber, wann Notepad geöffnet wird, und das ist Ihr Auslöser für die Automatisierung.

    Erstellen Sie im Aufgabenplaner eine Aufgabe, die beim Start der App ausgeführt werden soll.

    • Öffnen Sie den Aufgabenplaner ( taskschd.msc) und erstellen Sie eine neue Aufgabe – entweder „Einfache Aufgabe erstellen“ oder einfach „Aufgabe erstellen“, um die volle Kontrolle zu behalten.
    • Benennen Sie es aussagekräftig, z. B.„Notepad-Trigger starten“.Legen Sie fest, dass es für alle Benutzer ausgeführt wird (wahrscheinlich unter „Beim Ausführen der Aufgabe folgendes Benutzerkonto verwenden“ – wählen Sie BUILTIN\Users ).Wenn Sie die Anwendung über Gruppenrichtlinien durchführen, verwenden Sie `%LogonDomain%\%LogonUser%`.
    • Im Tab „Aktionen“ legen Sie fest, was Sie tun möchten – beispielsweise ein Skript oder einen Befehl ausführen. Führen Sie beispielsweise einen powershell.exeBefehl mit Parametern wie „“ aus -ExecutionPolicy Bypass -File "C:\PS\ProcessRunEvent.ps1". Stellen Sie sicher, dass Ihr Skript die gewünschte Funktion erfüllt – beispielsweise eine Meldung anzeigt, eine E-Mail versendet oder eine Sicherungskopie der Datei erstellt.
    • Gehen Sie nun zu Trigger, klicken Sie auf Neu, wählen Sie Bei einem Ereignis und dann Benutzerdefiniert. Klicken Sie auf Neuer Ereignisfilter.
    • Wählen Sie in den Filtereinstellungen als Protokoll „Sicherheit“, als Ereignis-ID 4688 und als Schlüsselwörter „ Audit Success“ aus.
    • Wechseln Sie zum XML- Tab, aktivieren Sie „Abfrage manuell bearbeiten“ und fügen Sie diese Zeile direkt vor dem schließenden Tag ein:
    and *[EventData[Data[@Name='NewProcessName'] and (Data='C:\\Windows\\System32\\notepad.exe')]]
  • Dieser benutzerdefinierte Filter erfasst genau das Ereignis, bei dem Notepad gestartet wurde. Die vollständige Abfrage sieht folgendermaßen aus: (einige Tags können abweichen)
  • <QueryList> <Query Id="0" Path="Security"> <Select Path="Security"> *[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and EventID=4688]] and *[EventData[Data[@Name='NewProcessName'] and (Data='C:\\Windows\\System32\\notepad.exe')]] </Select> </Query> </QueryList>
  • Speichern Sie die Aufgabe. Ihr Skript wird nun jedes Mal ausgeführt, wenn jemand Notepad öffnet. Getestet auf verschiedenen Systemen – je nach System sind möglicherweise kleinere Anpassungen erforderlich.
  • Und ehrlich gesagt, das ist etwas ungewöhnlich, funktioniert aber. Sobald Sie dieses Ereignis abfangen, können Sie allerlei Dinge tun: eine Benachrichtigung anzeigen, eine E-Mail senden oder sogar Dateien sichern. Wenn Sie nachverfolgen möchten, wann Apps beendet werden, suchen Sie nach der Ereignis-ID 4689 – „Ein Prozess wurde beendet“.

    Bedenken Sie jedoch, dass dieser Ansatz etwas komplex ist und einige Tücken aufweist, insbesondere wenn Richtlinien nicht sofort wirksam werden oder der Ereignisfilter nicht alle Ereignisse umgehend erfasst. Ist er aber erst einmal eingerichtet, wirkt er äußerst wirkungsvoll.