在 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
这对我有用...
首先我会强调我是 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
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
这对我有用...