macOS下PowerShell的Get-Process输出ProcessName被截断如何解决?
解决macOS上PowerShell Get-Process进程名截断问题
在macOS上,PowerShell的Get-Process依赖BSD风格的ps工具,默认会将进程名截断至15字符——这是底层工具的限制,并非PowerShell格式化输出的问题,所以Format-Custom或Format-List -Force这类格式化命令无法解决,因为ProcessName属性本身已经是截断后的值。
以下是两种可行的解决方法:
方法一:通过原生ps命令获取完整进程名
使用ps的comm=参数可以输出未截断的完整进程名,再转换成PowerShell对象方便后续处理:
# 筛选Google相关进程,输出PID和完整进程名 ps -axo pid,comm= | Where-Object { $_ -match 'Google' } | ForEach-Object { # 拆分PID和进程名(按空格拆分,只拆一次) $pid, $fullName = $_ -split '\s+', 2 [PSCustomObject]@{ Id = [int]$pid FullProcessName = $fullName # 可选:关联Get-Process的完整进程对象 Process = Get-Process -Id $pid -ErrorAction SilentlyContinue } }
方法二:从进程命令行提取完整名称
通过读取进程的命令行参数,提取完整的进程路径和名称:
Get-Process google* | ForEach-Object { # 读取进程命令行(macOS进程的cmdline用null分隔,替换为空格) $cmdLine = (Get-Content "/proc/$($_.Id)/cmdline" -Raw -ErrorAction SilentlyContinue) -replace "`0", " " if ($cmdLine) { $fullName = Split-Path $cmdLine -Leaf } else { # fallback到截断的名称,或者用ps命令补全 $fullName = (ps -p $_.Id -o comm=).Trim() } [PSCustomObject]@{ Id = $_.Id TruncatedProcessName = $_.ProcessName FullProcessName = $fullName FullCommandLine = $cmdLine?.Trim() } }
注意:/proc文件系统在部分macOS环境中可能不可用,此时可以用ps -p $_.Id -o comm=作为备选方案获取完整名称。
内容的提问来源于stack exchange,提问作者Teddy C
相关产品推荐
相关产品推荐

