2017-05-19 48 views
1


我遇到了問題。
1.第一種情況
過程已經開始。
我想在當前過程完成後做些事情。
例如
$process=[System.Diagnostics.Process]::GetProcessesByName("notepad")

Register-ObjectEvent $process Exited -Action {}
但在這種情況下,它不工作
如何註冊事件「已退出」?
2.第二種情況
該過程尚未啓動。 如何,我可以等待啓動過程?)Powershell中的進程

+1

'GetProcessesByName'返回的過程陣列,'註冊-ObjectEvent $工藝[0]已退出清議' –

+0

感謝您的幫助{<#在這裏#codez>}!這就是我正在尋找第一個問題! –

+0

嗯....順便說一句IF($ process.HasExited){} –

回答

0

第一部分是由馬蒂亞斯R.傑森與[System.Diagnostics.Process]::GetProcessesByName("notepad") | foreach {Register-ObjectEvent $_ Exited -Action { ... } }

對於第二部分回答,解決的辦法是下面。幸得這裏PDQ.com - Register-ObjectEvent

您需要使用WQL查詢來監視進程啓動事件,然後建立一個查詢觀察者將在一些過程的響應觸發事件起步,然後Register-ObjectEvent在該觀察者聽。代碼複製粘貼:

$Query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" 
$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $query 
$Action = { New-Event "PowerShell.ProcessCreated" -Sender $Sender -EventArguments $EventArgs.NewEvent.TargetInstance } 
register-objectEvent -InputObject $ProcessWatcher -EventName "EventArrived" -Action $Action 
+0

好的,'Register-WMIEvent'也是這裏的一個選項 –

+0

@ MathiasR.Jessen你可以把這個東西加入到這個答案中,它是c-維基。 – Vesper

+0

@Vesper 我不喜歡WMIEvent!)我會嘗試Vesper的方式!多謝! –