2013-07-10 4 views
38

przykład: jeśli biegnę notepad.exe c:\autoexec.bat,Jak zdobyć polecenia Wiersz informacyjny dla procesu w PowerShell lub C#

Jak mogę uzyskać c:\autoexec.bat w Get-Process notepad w PowerShell?

Albo jak mogę uzyskać c:\autoexec.bat w Process.GetProcessesByName("notepad"); w C#?

+0

Może to pomoże: [Jak uzyskać parametry wiersza polecenia z innego procesu] (http://social.msdn.microsoft.com/Forums/en-US/8efe163b -927e-4895-9983-b8c47b515d7c/how-to-the-command-line-parameters-from-a-different-process-in-c) – Corak

+0

nie jest jasne. czy możesz precyzyjniej określić, co dokładnie próbujesz zrobić? @victorwoo – Rezoan

+1

Proszę cofnąć się o krok i opisać rzeczywisty problem, który próbujesz rozwiązać, zamiast tego, co postrzegasz jako rozwiązanie. –

Odpowiedz

74

W PowerShell można uzyskać z wiersza poleceń procesu poprzez WMI:

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

pamiętać, że wymagane są uprawnienia administratora, aby móc uzyskać dostęp do informacji o procesach uruchomionych w kontekście innego użytkownika. Jako zwykły użytkownik jest widoczny tylko dla procesów działających we własnym kontekście.

+1

Działa, dziękuję. – victorwoo

+4

Jest to również aspekt uprawnień. Proces Powershell musi mieć uprawnienia co najmniej równoważne procesowi docelowemu. Tak więc zwykła sesja Powershell nie będzie w stanie uzyskać takich informacji dla procesu z podniesionym poziomem (na przykład jako Administrator). w tym przypadku CommandLine (odpowiedź) będzie po prostu pusta. – CJBS

+2

@CJBS Aby być precyzyjnym, potrzebujesz uprawnień administratora, aby uzyskać dostęp do informacji o procesach działających w kontekście innego użytkownika. Jako zwykły użytkownik jest widoczny tylko dla procesów działających we własnym kontekście. –

1

Ta odpowiedź jest doskonała, jednak dla futureproofing i zrobić przyszłości ci przysługę, chyba że używasz bardzo starej PowerShell (w tym przypadku polecam aktualizacji!) Get-WMIObject został zastąpiony przez Get-CimInstance Hey Scripting Guy reference

Spróbuj

$process = "notepad.exe" 
Get-CimInstance Win32_Process -Filter "name = '$process'" | select CommandLine 
Powiązane problemy