88

例如:如果我跑步notepad.exe c:\autoexec.bat

如何c:\autoexec.bat进入Get-Process notepadPowerShell?

或者我怎样才能c:\autoexec.bat进入Process.GetProcessesByName("notepad");C#?

4

4 回答 4

144

在 PowerShell 中,您可以通过 WMI 获取进程的命令行:

$process = "notepad.exe"
Get-WmiObject Win32_Process -Filter "name = '$process'" | Select-Object CommandLine

请注意,您需要管理员权限才能访问有关在另一个用户的上下文中运行的进程的信息。作为普通用户,只有在您自己的上下文中运行的进程才能看到它。

于 2013-07-10T23:20:40.017 回答
50

这个答案非常好,但是对于未来的验证和对您的帮助,除非您使用的是相当旧的 powershell(在这种情况下我建议更新!) Get-WMIObject 已被 Get-CimInstance Hey Scripting Guy 参考取代

试试这个

$process = "notepad.exe"
Get-CimInstance Win32_Process -Filter "name = '$process'" | select CommandLine 
于 2017-12-13T19:53:48.240 回答
8

我正在使用powershell 7.1,这似乎现在作为脚本属性内置到进程对象中:

> (Get-Process notepad)[0].CommandLine
"C:\WINDOWS\system32\notepad.exe"

有趣的是,您可以查看它的实现,并看到它部分使用了 PsychoData 的答案:

($process | Get-Member -Name CommandLine).Definition
System.Object CommandLine {get=
                        if ($IsWindows) {
                            (Get-CimInstance Win32_Process -Filter "ProcessId = $($this.Id)").CommandLine
                        } elseif ($IsLinux) {
                            Get-Content -LiteralPath "/proc/$($this.Id)/cmdline"
                        }
                    ;}

在进程上运行 Get-Member 表明它是System.Diagnostics.Process的一个实例,但它有几个脚本化的属性。

其他属性是 FileVersion、Path、Product 和 ProductVersion。

于 2020-12-03T18:21:17.923 回答
8

如果您将以下代码放入您的 powershell $profile 文件中,您可以永久扩展“进程”对象类并使用“命令行”属性

例子:

get-process notepad.exe | select-object ProcessName, CommandLine

代码:

$TypeData = @{
    TypeName = 'System.Diagnostics.Process'
    MemberType = 'ScriptProperty'
    MemberName = 'CommandLine'
    Value = {(Get-CimInstance Win32_Process -Filter "ProcessId = $($this.Id)").CommandLine}
}
Update-TypeData @TypeData
于 2021-03-21T17:08:10.407 回答