2015-02-05 2 views
1

먼저 PowerShell에 익숙하지 않습니다.PowerShell에서 다중 프로세스 중지

나는 두 프로세스의 모든 인스턴스를 멈추려하고있다. 필자는 powershell에서 아래의 코드를 작성하고 실행했지만 사실은 나에게 BSOD를 제공하기 때문에 무언가를해야 할 것이다.

내가 잘못한 부분을 지적 할 수 있습니까?

$processes = Get-Process 
    foreach ($process in $processes) 
    { 
    if($process.ProcessName -eq "chrome" -or "chromedriver") 
    { 
     $process | Stop-Process -Force 
    } 

} 
+0

그것에 나를 이길하지만 arco444 '태그를'Stop-Process'에 보내면 그것을 볼 수 있습니다. 인쇄물의 자유로운 사용은 새로운 언어를 배우는 열쇠입니다. – meatspace

답변

1

당신은 다음을 수행해야합니다 그렇지 않으면 당신이 if(some_condition -or true) 말을하고

if(($process.ProcessName -eq "chrome") -or ($process.ProcessName -eq "chromedriver")) 
{ 
    $process | Stop-Process -Force 
} 

의 결과는 항상 평가합니다 true로, 당신이 모든 프로세스를 죽이고 당신의 목록을 갈 수 있도록!

문자열이 null 값이 아니므로 PowerShell에서이 문자열을 true로 해석합니다.

[PS] > $null -or $null 
False 
[PS] > $null -or "abc" 
True 
+0

대단히 감사합니다! – user3451887

0

나는 또한 PowerShell을 새로운 해요하지만이 시도 : 다음과 같은 방법으로 콘솔에서 테스트 할 수 있습니다

get-process | where-object { $_.Name -eq "chrome" -or $_.Name -eq "chromedriver" } | stop-process -force 

나는 정지 프로세스 -WhatIf 그것을 시도하고 광산에 좋아 보인다. Windows 8.1에서 PowerShell ISE를 사용하고 있습니다.

1

if에 관한 논리가 Arco444의 설명이 맞습니다. 조건은 독립적으로 평가하고 null이 아닌 비어 있지 않은 문자열은 [bool]

[bool]"chromedriver" 

로 캐스트 -contains를 사용할 수이 처리하는 또 다른 방법은 참으로 평가. 한 가지 가치에 대해 여러 가지를 점검하고 있습니다.

If("chrome","chromedriver" -contains $process.ProcessName){ 
    $process | Stop-Process -Force 
} 

어쨌든 특정 사용자 만 찾고 있기 때문에 돌아 오는 프로세스를 필터링하는 것이 더 나을 것입니다. 디버거를 지원하는 cmdlet의 경우 -WhatIf도 도움이 될 수 있습니다.

Get-Process "chrome","chromedriver" | Stop-Process -Force -WhatIf 
0
Get-Process chromedriver | Stop-Process -Force 
나를 위해 그것을했다

... 당신은`echo` 당신이있어`- Process`ing를 중지하거나하는 것은`-Confirm를 추가하면