Daha önce kısmen bu konuyla ilgilenmiştim ama yeterli olmamıştı.
Komut satırından bir süreci başlatan süreci bulmak istiyourm. Örneğin bir notepad süreci var. Bunu başlatan süreci Get-Process ile bulmak mümkün değil. Bir WMI/CIM sorgusu lazım. Bunu da hem PID, hem de süreç ismi ile çalışacak şekilde yapmam gerek. Ben şöyle bir parent.ps1 dosyası oluşturarak yaptım:
bunuda
.\parent.ps1 -ProcessName notepad
şeklinde çalıştırınca şöyle bir çıktı verdi:
ProcessId ParentProcessId Name CommandLine
--------- --------------- ---- -----------
12216 3708 Notepad.exe "C:\Windows\System32\notepad.exe" Buradan 3708'i sorguladığımda bana svchost döndü.
ps -id 3708
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
450 21 7576 51272 3708 0 svchost Bu noktada da win32_service sınıfını sogrulamak gerek, 3708'in içinde hangi hizmetler çalışıyor diye:
Bunu da serv.ps1 diye kaydedip
.\serv1.ps1 -Id 3708
şeklinde çalıştırınca
ProcessId Name StartMode State Status ExitCode
--------- ---- --------- ----- ------ --------
3708 Schedule Auto Running OK 0Notepad'i çalıştıran hizmetin görev zamanlayıcısı olduğunu buldum.
2026-10-06: Şöyle bir kullanım ile
ps -id 2298 | .\parent.ps1
sonuç dönebilmesi için param(..) bloğuna şu bölümü ekledim:
Bu sayede pipeline'dan System.Diagnostic.Process tipinde veri kabul edilmesini ve bu veri ile işlem yapılmasını sağladım. İşlemi yapan bölüm de switch bloğunun en son koşulu:
Hiç yorum yok:
Yorum Gönder