从进程 ID 列表中获取 processId 的值

Fetching value of processId from list of process Ids

我运行以下cmdlet获取文件使用的进程ID:

Get-Process | foreach{$processVar = $_;$_.Modules | foreach{if($_.FileName -eq $lockedFile){$processVar.Name + " PID:" + $processVar.id}}}

以上 cmdlet 正在生成输出 process1 PID:5260

现在,我需要通过管道传输 cmdlet 以终止上面的 process id,我在下面的 cmdlet 中编写了它:

Get-Process | foreach{$processVar = $_;$_.Modules | foreach{if($_.FileName -eq $lockedFile){$processVar.Name + " PID:" + $processVar.id}}} | Stop-Process $processVar.id

但是,它并没有停止进程。

我基本上是想打印出进程名和进程id,然后杀掉进程。

进程名称和进程 ID 已正确打印出来,但需要帮助将进程 ID 通过管道传输到 cmdlet,然后终止进程。

也许你可以这样做,我相信将 object 输出到控制台会更具可读性。您需要做的唯一更改是将 Stop-Process 移动到 if 条件内。

$lockedFile = 'defineThisVariable'
Get-Process | ForEach-Object {
    if($_.Modules.FileName.where({$_ -eq $lockedFile})) {
        # This is the ouput object to the console
        [pscustomobject]@{
            Process = $_.Name
            PID     = $_.id
        }
        # Here you stop the Process, you can add
        # `-Verbose` for more output to console
        Stop-Process -Id $_.Id
    }
}