如何通过PowerShell的Get-Process cmdlet正确获取本地计算机上所有正在运行的进程?
嗨,我来帮你理清楚这个问题!你遇到的情况其实挺常见的,核心原因大多是任务管理器里的显示名称和PowerShell中Get-Process默认返回的进程名不是一回事。
先给你拆解下问题:任务管理器里看到的“nVision Axence Agent”是进程的显示名称(DisplayName),而Get-Process默认输出里的Name列,是进程实际可执行文件的名称(去掉了.exe后缀)——比如这个Axence Agent的进程名可能是AxenceAgent或者nVisionService这类,和显示名称完全不一样,所以你直接搜Axence自然找不到对应的进程。
那该怎么解决呢?给你几个实用的方法:
第一步:匹配显示名称和进程名
先运行这个命令,把所有进程的ID、进程名和显示名称都列出来,方便你对应查找:Get-Process | Select-Object Id, Name, DisplayName | Sort-Object DisplayName在输出里找到“nVision Axence Agent”对应的
Name值,之后用Get-Process -Name 你找到的Name值就能精准定位到这个进程了。直接通过显示名称筛选
如果你不想先查进程名,也可以直接用Where-Object匹配显示名称里的关键词,比如:Get-Process | Where-Object { $_.DisplayName -like "*Axence*" }这样就能直接捞出所有显示名称包含“Axence”的进程。
检查PowerShell的位数(针对64位系统)
如果你用的是64位Windows,但不小心启动了32位的PowerShell(路径一般是C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe),那它可能无法看到部分64位进程。这时候你需要切换到64位PowerShell(默认从开始菜单启动的就是,路径为C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe),再运行Get-Process就能看到完整的进程列表了。确认管理员权限
虽然你说已经用了管理员权限,但有时候UAC的提示可能没真正让你获得最高权限。建议右键点击PowerShell图标,选择“以管理员身份运行”,再重试命令,确保你有足够权限访问系统级的进程。
备注:内容来源于stack exchange,提问作者dima hmel




