如果要冻结Chrome,我想杀死它;因此,我为PowerShell编写了脚本,并将其与在每小时运行的“任务管理器”中安排的任务链接。问题在于它不仅会冻结Chrome,而且总是会杀死Chrome。 该脚本有什么问题?
$response = Get-Process -Name chrome |
Select-Object -ExpandProperty Responding
if ($response -ne 'True') {
taskkill /f/im chrome
} else {
Write-Host "Its Good"
exit
}
答案 0 :(得分:0)
PowerShell脚本的扩展名为.ps1
。而且您的条件中有一个反模式:
$response -ne 'True'
$response
是布尔值,因此它是不是。您不应该将它与字符串进行比较。
我建议这样,因为chrome产生了很多进程:
foreach ($chrome in Get-Process -Name chrome) {
if (-not $chrome.Responding) {
$chrome | Stop-Process -Force
}
}
答案 1 :(得分:0)
在您的脚本中: 响应的属性是一个布尔值。 变量$ response是一个包含布尔值(如果您正在运行多个Chrome进程)的数组或一个布尔值(如果您仅正在运行一个Chrome进程)
当你写的时候
if ($response -ne 'True')
您说:“如果$ response数组不等于字符串'True'”。
编辑:经过测试,感谢@ TheIncorrigible1,$ response被转换为字符串
要执行您的请求,我建议以下内容:
$response = get-process -Name chrome
$response | ForEach-Object {
if ($_.Responding) {
#Your process is responding 'no problemo'
Write-Host "$($_.ProcessName) is responding"
}
else {
#Your process is not responding
$_ | stop-process -force #edited after testing
Write-Host "$($_.ProcessName) killed"
}
}
希望这会有所帮助:)