2017-05-19 1 views
1


문제가 있습니다.
첫 번째 상황
프로세스가 이미 시작되었습니다.
그리고 현재 프로세스가 완료된 후에 뭔가를하고 싶습니다.
$process=[System.Diagnostics.Process]::GetProcessesByName("notepad")
그리고 Register-ObjectEvent $process Exited -Action {}
그러나이 경우
, 내가 이벤트 "에 Exited"을 등록 할 수 있습니다 방법
을 작동하지 않습니다 예를 들어
?
두 번째 상황
프로세스가 아직 시작되지 않았습니다. 어떻게 내가 할 수있는 시작 프로세스를 기다리?)Powershell의 프로세스

+1

'GetProcessesByName' 프로세스의 배열을,'반환 등록-ObjectEvent $ 과정 [0]에 Exited - 액션 당신의 도움에 대한' –

+0

감사합니다 {<여기에 # #의 codez>}! 이것은 내가 첫번째 질문을 찾고 있었던 것이다! –

+0

Hmmm .... 그리고 그런 식으로 IF ($ process.HasExited) {} ​​ –

답변

0

첫 번째 부분은 두 번째 부분에 대한 [System.Diagnostics.Process]::GetProcessesByName("notepad") | foreach {Register-ObjectEvent $_ Exited -Action { ... } }

와 마티아스 R. Jessen 응답되는 솔루션은 다음과 같습니다. 여기에 신용 기록이 있습니다 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

Nice one, 'Register-WMIEvent'도 여기에 옵션입니다 –

+0

@ MathiasR.Jessen이 답변에 그 것을 추가 할 수 있습니다. 위키. – Vesper

+0

@Vesper WMIEvent가 마음에 들지 않습니다!) 베스퍼 방식으로 시도해 보겠습니다! 정말 고마워! 나는 새로운 객체 Management.EventQuery'보다 더 좋아 '라고 생각 @Vesper –