Windows'ta Belirli Bir Program Açıldığında/Kapandığında Komut Dosyası (Program) Çalıştırın
Bu yazıda, Windows'ta belirli bir programı (işlemi) başlatma olayını nasıl izleyeceğimizi ve bir eylem gerçekleştirmeyi (komut dosyası çalıştırma, komut, program, e-posta gönderme vb.) göstereceğiz. Örnek olarak, notepad.exe işleminin başlatılmasını izleyeceğiz. Ve bir kullanıcı Not Defteri'ni açtığında, Windows otomatik olarak belirli bir PowerShell betiğini çalıştırır.
Her şeyden önce, Windows'ta süreç denetim politikasını yapılandırın. Bağımsız bir bilgisayarda Yerel Grup İlkesi Düzenleyicisi'ni kullanarak denetim ilkesini yapılandırabilirsiniz (
gpedit.msc). AD etki alanınızdaki bilgisayarlarda ve sunucularda bir ilke yapılandırmak istiyorsanız, Grup İlkesi Yönetimi konsolunu (
gpmc.msc).
Bilgisayar Yapılandırması -> Windows Ayarları -> Güvenlik Ayarları -> Yerel İlkeler -> Denetim'e gidin Politika;
-
Denetleme işlemi izleme özelliklerini açın ve Başarı olayları için etkinleştirin;
Aşağıdakileri çalıştırarak Grup İlkesi ayarlarını uygulayın:
gpupdate /force
Artık Windows'ta herhangi bir işlemi başlatırken, EventID 4688 (
A new process has been created) Olay Görüntüleyici -> Windows Günlükleri -> Güvenlik'te görünecektir. Olay, işlemi kimin çalıştırdığını (Hesap adı), işlemin adını (Yeni İşlem Adı) ve üst işlemin adını (Oluşturan) gösterir. İşlem Adı).
PowerShell'i kullanarak belirli bir işlemle Olay Günlüğünden uygulama başlatma olaylarını seçebilirsiniz:
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*”}Sonuç olarak, programı bu bilgisayarda kullanıcılar tarafından başlatma geçmişini aldık.
Ardından, Görev Zamanlayıcı'da EventID 4688 ile bir olay göründüğünde çalışacak yeni bir görev oluşturun.
Görev Zamanlayıcı'yı açın (
taskschd.msc) ve yeni bir görev oluşturun -> Görev Oluştur;
Görev adını girin ve tüm kullanıcılar için çalıştırılması gerektiğini belirtin (Görevi çalıştırırken şu kullanıcı hesabını kullanın -> BUILTIN\Users). GPO kullanarak bir görev oluşturursanız şu biçimi kullanın:
%LogonDomain%\%LogonUser%;
İşlemler sekmesinde gerçekleştirmek istediğiniz işlemi ayarlayın. Bu örnekte, bir PowerShell betiği çalıştıracağım (call
powershell.exeniteliklerle:
-ExecutionPolicy Bypass -file "C:\PS\ProcessRunEvent.ps1);
Ardından görevi bir Windows olayına bağlayın. Tetikleyiciler sekmesine gidin, Yeni -> Bir etkinlikte -> Özel -> Yeni Etkinlik'i seçin Filtre;
-
Bir sonraki pencerede, aşağıdaki olay filtresi seçeneklerini belirtin:
Olay günlükleri:SecurityEtkinlik Kimliği:
4688anahtar kelimeler:
Audit Success Ardından, XML sekmesine gidin ve Sorguyu manuel olarak düzenle seçeneğini etkinleştirin. Filtreye aşağıdaki satırı ekleyerek sorguyu düzenleyin:
and *[EventData[Data[@Name='NewProcessName'] and (Data='C:\Windows\System32\notepad.exe')]]Aşağıdaki XML sorgusunu alacaksınız:
<QueryList> <Query Id="0" Path="Security"> <Select Path="Security"> *[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and Task = 13312 and (band(Keywords,9007199254740992)) and (EventID=4688)]] and *[EventData[Data[@Name='NewProcessName'] and (Data='C:\Windows\System32\notepad.exe')]] </Select> </Query> </QueryList>Görevi kaydedin.
notepad.exe'yi çalıştırmayı deneyin. Bir kullanıcı Not Defteri'ni her açtığında, PowerShell betiğiniz otomatik olarak çalışır.
Örneğin, bir açılır bildirim görüntüleyebilir veya PowerShell kullanarak bir e-posta gönderebilirsiniz.
Belirli bir uygulamayı kapattıktan sonra, bazen bir yedekleme komut dosyası vb. çalıştırmak isteyebilirsiniz. Bir programdan çıkışı izlemek istiyorsanız 4689 Olay Kimliğine sahip etkinliği kullanın —
A process has exitedDaha önce, durursa bir işlemi otomatik olarak yeniden başlatmak için bir PowerShell betiği gösterdik. Bir işlemin çalıştırma/durdurma olayını izleyen çözüm daha zariftir ve çalışan Windows işlemlerini izlemek için bir PowerShell betiği gerektirmez.





