首先,我要强调我是powershell的新手。
我试图阻止两个进程的所有实例,我已经编写并在powershell中运行以下内容,但实际上它给了我一个BSOD,所以我必须做一些相当愚蠢的事情。
有谁可以指出我哪里出错了?
$processes = Get-Process
foreach ($process in $processes)
{
if($process.ProcessName -eq "chrome" -or "chromedriver")
{
$process | Stop-Process -Force
}
}
答案 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
那为我做了......