在 PowerShell 中停止多个进程

Stop Multiple Processes In PowerShell

首先我会强调我是 powershell 的新手。

我正在尝试停止两个进程的所有实例,我已经在 powershell 中编写并 运行 下面的内容,但它实际上给我一个蓝屏死机,所以我一定是做了一些相当愚蠢的事情。

谁能指出我哪里做错了?

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

 }

您需要执行以下操作:

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

否则你会说 if(some_condition -or true),其结果将始终评估为真,因此你遍历列表以终止所有进程!

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

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

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

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

我用 stop-process -WhatIf 试过了,我的感觉不错。我在 Windows 8.1

中使用 PowerShell ISE

Arco444 解释的关于 if 语句的逻辑是正确的。条件是独立评估的,非 null 非空字符串评估为 true with cast as [bool]

[bool]"chromedriver" 

另一种处理此问题的方法是使用 -contains。如果你有几件事情,你正在检查一个值。

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

更好的方法是过滤您要返回的进程,因为无论如何您只是在寻找某些进程。对于支持它的 cmdlet,-WhatIf 也有助于调试。

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

这对我有用...