如何获取从 powershell 启动的进程的 pid?

How does one obtain the pid of a process started from powershell?

如果我使用 powershell 运行 一个外部命令,我如何获取它的 pid?

我想获得它是为了以后可以优雅地退出它(不仅仅是直接终止进程,而是在 finally 块的意义上这样做)

Get-Process

Write-Output (Get-Process -Name "Sonos").Id

这将为您提供 PID - 但是根据您的描述,将 Get-Process 输出到变量并改为处理对象更容易

try {
    $process = Start-Process -FilePath "C:\Program Files (x86)\Sonos\Sonos.exe"
    Write-Output $process.Id
}
catch {
    throw
}
finally {
    if ($process) {
        Stop-Process -InputObject $process
        # Alternative: $process | Stop-Process
    }
}

使用System.Diagnostics.Process对象,可以启动一个进程,return一个Process对象,其中包括新创建的进程PID。

例如:

$Process = [Diagnostics.Process]::Start("nssm.exe")   
Write-Host $Process.Id