在PowerShell中停止多个进程

时间:2015-02-05 16:21:12

标签: powershell

首先,我要强调我是powershell的新手。

我试图阻止两个进程的所有实例,我已经编写并在powershell中运行以下内容,但实际上它给了我一个BSOD,所以我必须做一些相当愚蠢的事情。

有谁可以指出我哪里出错了?

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

 }

4 个答案:

答案 0 :(得分:1)

您需要执行以下操作:

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

否则你会说if(some_condition -or true),其结果将始终评估为true,因此您会通过列表查看所有进程!

字符串不是空值,因此PowerShell会将其解释为true。您可以通过以下方式在控制台中进行测试:

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

答案 1 :(得分:1)

关于if语句的逻辑如Arco444所解释的那样是正确的。条件是独立评估的,非空非空字符串的结果为[bool]

[bool]"chromedriver" 

处理此问题的另一种方法可能是使用-contains。如果您有几件事要检查一个值。

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

最好还是过滤你要返回的进程,因为你只是在寻找某些进程。对于支持它的cmdlet -WhatIf也可以帮助调试。

Get-Process "chrome","chromedriver" | Stop-Process -Force -WhatIf

答案 2 :(得分:0)

我也是PowerShell的新手,但试试这个:

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

我用停止进程-WhatIf尝试了它,它看起来很好。我在Windows 8.1中使用PowerShell ISE

答案 3 :(得分:0)

Get-Process chromedriver | Stop-Process -Force

那为我做了......