PowerShell 使用数组终止多个进程 ID

PowerShell 使用数组终止多个进程 ID

我尝试了多种使用数组来终止 PID 的方法,但都失败了。如果我使用echo命令而不是taskkill它,它会正常工作,但是如果我使用taskkill命令,我会得到附件中的错误...
还尝试将Array数据类型转换为,Int32但仍然没有成功。

$a = @(Get-WmiObject Win32_Process -Filter "name like 'powershell.exe' and commandLine like '%cycle%'" | Select-Object  ProcessId)
if ($a )
{
   taskkill.exe /F /PID $a[0]
   taskkill.exe /F /PID $a[1]
   taskkill.exe /F /PID $a[2]
}

错误:
错误

答案1

附加.ProcessId到变量值的末尾$a(因为您已经将其括在括号中),以便仅列出ProcessId数组中匹配的数字(没有列标题值)。然后将匹配的$a数组通过ForEach-Object管道传输到循环中,以迭代ProcessId数组值并将其传递到taskkill命令中,从而相应地终止进程。

电源外壳

$a = @(Get-WmiObject Win32_Process -Filter "name like 'powershell.exe' and commandLine like '%cycle%'" | Select-Object  ProcessId).ProcessId;
$a | ForEach-Object {taskkill.exe /F /PID $_};

问题你遇到的是因为使用这个代码

@(Get-WmiObject Win32_Process -Filter "name like 'powershell.exe' and commandLine like '%cycle%'" | Select-Object  ProcessId) 

给出包含无法解释的标题列的输出taskkill

ProcessId
---------
    2244 

使用此代码

@(Get-WmiObject Win32_Process -Filter "name like 'powershell.exe' and  commandLine like '%cycle%'" | Select-Object  ProcessId).ProcessId 

给出此输出,该输出仅是可以用于相应处理/终止的int匹配进程的值。taskkill

2244

笔记:使用$_.ProcessId现有代码可能会按照您编写的方式工作,以在该级别进行扩展,因此taskkill.exe /F /PID $_.ProcessId也可能足够。但我不认为条件if()是完全必要的,所以我会省略它。


支持资源

相关内容