2013-07-10 66 views
38

e.g:如果我跑notepad.exe c:\autoexec.bat如何獲得命令行方式在PowerShell中或過程C#

我怎樣才能在PowerShell中得到c:\autoexec.batGet-Process notepad

或者我怎樣才能得到c:\autoexec.batProcess.GetProcessesByName("notepad");在C#中?

+0

也許這將幫助你:如何從一個不同的進程的命令行參數(http://social.msdn.microsoft.com/Forums/en-US/8efe163b -927e-4895-9983-b8c47b515d7c/how-to-get-the-command-line-parameters-from-a-process-in-c) – Corak

+0

其不清楚。你能更清楚地指出你想要做什麼? @victorwoo – Rezoan

+1

請退後一步,描述您嘗試解決的實際問題,而不是您認爲的解決方案。 –

回答

74

在PowerShell中,您可以通過WMI獲取進程的命令行:

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

請注意,您需要管理員權限才能夠訪問有關的其他用戶的上下文中運行的進程的信息。作爲普通用戶,只有在您自己的環境中運行的進程才能看到它。

+1

它的工作原理,謝謝。 – victorwoo

+4

這也有一個權限方面。 Powershell進程需要具有至少與目標進程相同的權限。所以常規的Powershell會話將無法獲得運行提升的進程的信息(例如以管理員身份)。在這種情況下,CommandLine(響應)將只是空白。 – CJBS

+2

@CJBS準確地說,您需要管理員權限才能訪問有關在另一個用戶的上下文中運行的進程的信息。作爲普通用戶,只有在您自己的環境中運行的進程才能看到它。 –

1

這個答案是優秀的,但是,對於futureproofing和未來做你的忙,除非你使用很老的PowerShell(在這種情況下,我推薦的更新!)GET-WmiObject可以已經被取代GET-CimInstance Hey Scripting Guy reference

試試這個

$process = "notepad.exe" 
Get-CimInstance Win32_Process -Filter "name = '$process'" | select CommandLine 
相關問題