例如:如果我跑步notepad.exe c:\autoexec.bat
,
我怎样才能c:\autoexec.bat
在Get-Process notepad
PowerShell中?
或者我怎样才能c:\autoexec.bat
在Process.GetProcessesByName("notepad");
C#中?
例如:如果我跑步notepad.exe c:\autoexec.bat
,
我怎样才能c:\autoexec.bat
在Get-Process notepad
PowerShell中?
或者我怎样才能c:\autoexec.bat
在Process.GetProcessesByName("notepad");
C#中?
Answers:
在PowerShell中,您可以通过WMI获取进程的命令行:
$process = "notepad.exe"
Get-WmiObject Win32_Process -Filter "name = '$process'" | Select-Object CommandLine
请注意,您需要管理员权限才能访问有关在另一个用户的上下文中运行的进程的信息。作为普通用户,只有在您自己的上下文中运行的进程才对您可见。
-Filter
如果在Get-WmiObject
远程计算机上运行(使用-ComputerName
参数),则会在远程主机上进行过滤,从而减少了通过网络传输的数据量(从而提高了性能)。从远程主机获取所有WMI数据Where-Object
后,在本地使用筛选器。但是,像在这种情况下一样,在本地运行时没有什么区别。另请注意,该语法仅在PowerShell v3或更高版本中有效。在此之前,您必须使用。Get-WmiObject
where property <op> value
where { $_.property <op> value }
"processid = 1234"
-我用它来查看哪个网站正在流氓我们的服务器(有200个w3wp.exe
进程)
这个答案是很好的,但是对于将来的证明以及对您的帮助,对您来说是一个好处,除非您使用的是很老的Powershell(在这种情况下,我建议您进行更新!)Get-WMIObject已被Get-CimInstance取代嘿,脚本专家参考
尝试这个
$process = "notepad.exe"
Get-CimInstance Win32_Process -Filter "name = '$process'" | select CommandLine
Get-CimInstance Win32_Process
,name
包括.exe扩展名。与有所不同Get-Process
。
我使用的是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。