2013-07-10 11 views
38

per esempio: se corro notepad.exe c:\autoexec.bat,Come ottenere informazioni di comando di linea per un processo in PowerShell o C#

Come posso ottenere c:\autoexec.bat in Get-Process notepad in PowerShell?

O come posso ottenere c:\autoexec.bat in Process.GetProcessesByName("notepad"); in C#?

+0

Forse questo ti aiuterà a: [Come ottenere i parametri della riga di comando di un processo diverso] (http://social.msdn.microsoft.com/Forums/en-US/8efe163b -927e-4895-9983-b8c47b515d7c/how-to-get-the-command-line-parameters-from-a-different-process-in-c) – Corak

+0

non è chiaro. puoi specificare più chiaramente cosa stai cercando di fare esattamente? @victorwoo – Rezoan

+1

Si prega di fare un passo indietro e descrivere l'effettivo problema che si sta tentando di risolvere invece di ciò che si percepisce come la soluzione. –

risposta

74

In PowerShell è possibile ottenere la linea di comando di un processo tramite WMI:

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

Nota che è necessario privilegi di amministratore per poter accedere a queste informazioni sui processi in esecuzione nel contesto di un altro utente. Come utente normale è visibile solo a te per i processi in esecuzione nel tuo contesto.

+1

Funziona, grazie. – victorwoo

+4

C'è anche un aspetto delle autorizzazioni. Il processo PowerShell deve disporre di autorizzazioni almeno equivalenti al processo di destinazione. Quindi una sessione Powershell normale non sarà in grado di ottenere tali informazioni per un processo in esecuzione elevata (ad esempio come amministratore). in questo caso, CommandLine (la risposta) sarà vuota. – CJBS

+2

@ CJBS Per essere precisi sono necessari i privilegi di amministratore per poter accedere a tali informazioni sui processi in esecuzione nel contesto di un altro utente. Come utente normale è visibile solo a te per i processi in esecuzione nel tuo contesto. –

1

Questa risposta è eccellente, tuttavia per futureproofing e per fare futuro un favore, se non stai utilizzando piuttosto vecchio PowerShell (nel qual caso vi consiglio un aggiornamento!) Get-WmiObject è stato sostituito da Get-CimInstance Hey Scripting Guy reference

Prova questa

$process = "notepad.exe" 
Get-CimInstance Win32_Process -Filter "name = '$process'" | select CommandLine 
Problemi correlati