如何获取进程的StartInfo属性?343个进程均无该属性
获取PowerShell进程StartInfo的方法
你遇到的情况是因为Get-Process返回的System.Diagnostics.Process对象默认不会自动加载StartInfo属性——这个属性需要额外调用系统接口去获取,而且受权限、进程类型限制,很多进程无法成功读取该属性。
下面是两种可行的解决方式:
方法一:通过CIM获取进程启动信息(推荐)
使用Get-CimInstance调用Win32_Process类,可以直接拿到进程的启动命令行、执行路径等信息,这些内容对应StartInfo里的核心字段,且兼容性更好:
Get-CimInstance Win32_Process | Select-Object Name, ExecutablePath, CommandLine
其中CommandLine包含了进程启动时的完整命令(可执行文件路径+参数),ExecutablePath对应StartInfo.FileName。
方法二:手动刷新Process对象的StartInfo属性
如果一定要使用Process对象的StartInfo,可以手动调用Refresh()方法尝试加载,但注意很多进程会因权限不足或系统限制无法获取,需要捕获异常:
Get-Process | ForEach-Object { try { $_.Refresh() # 检查FileName是否有效,避免返回空的StartInfo if (-not [string]::IsNullOrEmpty($_.StartInfo.FileName)) { $_ | Select-Object Name, @{Name='StartInfo'; Expression={$_.StartInfo}} } } catch { # 忽略无法访问的进程 } }
内容的提问来源于stack exchange,提问作者lit
相关产品推荐
相关产品推荐

