【发布时间】:2018-01-03 20:29:23
【问题描述】:
我有以下脚本来查找进程“dotnet.exe”。在我的系统中,我有许多 dotnet.exe 进程正在运行。但我想杀死具有命令行参数“MyService\Web\argument”的“dotnet.exe”。我正在尝试通过以下脚本来做到这一点。但它没有找到任何东西,虽然我在任务管理器中看到了这个过程。
$process = Get-WmiObject Win32_Process | select name, commandline
foreach ($p in $process)
{
if ($p.name -contains "dotnet.exe" -and $p.commandline -contains "web")
{
$kp = Get-Process $p;
$kp.CloseMainWindow();
if (!$kp.HasExited)
{
$kp | Stop-Process -Force
}
}
else
{
Write-Host name: $p.name and param: $p.commandline;
}
}
【问题讨论】:
-
$process 是否包含您正在寻找的那个?
-
(Get-WmiObject Win32_Process -Filter "name like '%dotnet.exe%' and commandline like '%web%'").Terminate()? -
您使用了错误的比较运算符。
-contains设计用于与单个元素进行数组比较。使用-like -
我收到错误:方法调用失败,因为 [Selected.System.Management.ManagementObject] 不包含名为“Terminate”的方法。在 C:\practice\kill_web.ps1:6 char:8 + $p.Terminate() + ~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (Terminate:String) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound
-
显然您试图将我发布的代码修改为您问题中的代码。你为什么这么做?请不要在 开始工作之前发挥创意。使用我发布的代码,无需任何修改或添加。
标签: powershell process arguments kill-process