it-swarm.com.de

Bei einer gegebenen PID unter Windows - wie finde ich die Befehlszeilenanweisung, die sie ausgeführt hat?

In einer Datenbank kann ich eine Liste aller aktuell ausgeführten Prozesse und den SQL-Befehl abrufen, mit dem sie gestartet wurden.

Ich würde gerne etwas Ähnliches an einer Windows-Box machen.

Ich kann die Liste der Prozesse abrufen, aber nicht die Befehlszeile, mit der sie gestartet wurden.

Meine Frage lautet: Bei einer PID unter Windows - wie finde ich die Befehlszeilenanweisung, die sie ausgeführt hat?

Annahmen:

  • Windows 7 und gleichwertige Server
27
Hawkeye

Powershell und WMI.

Get-WmiObject Win32_Process | Select ProcessId,CommandLine

Oder

Get-WmiObject -Query "SELECT CommandLine FROM Win32_Process WHERE ProcessID = 3352"

Beachten Sie, dass Sie über Berechtigungen verfügen müssen, um auf diese Informationen zu einem Prozess zugreifen zu können. Daher müssen Sie den Befehl möglicherweise als Administrator ausführen, wenn der gewünschte Prozess in einem privilegierten Kontext ausgeführt wird.

37
Ryan Ries

Sie können das WMI-Subsystem verwenden und WMIC.EXE verwenden, um auf diese Informationen zuzugreifen. Angenommen, eine PID von 600:

wmic.exe path Win32_Process where handle='600' get name, commandline  /format:list

Sie können auch nach Namen oder anderen Merkmalen des Prozesses suchen. Verwenden Sie diesen Befehl, um alle Attribute aufzulisten:

wmic.exe path Win32_Process get  /format:list
21
RobW

Die anderen Antworten sind sicherlich gute Optionen, die Ihnen aufgrund ihrer Befehlszeilennatur in einem automatisierten System gute Dienste leisten (und ich sehe aus dem Tag, dass Sie genau das wollten). Natürlich möchten einige Leute diese Art von Informationen möglicherweise über eine grafische Benutzeroberfläche untersuchen. Hier ist eine Alternative in dieser Richtung.

Process Explorer ist ein Sysinternals-Tool, das von Microsoft verwaltet wird. Es kann die Befehlszeile des Prozesses im Eigenschaftendialog des Prozesses sowie das übergeordnete Element anzeigen, das ihn gestartet hat, obwohl der Name dieses Prozesses möglicherweise nicht mehr verfügbar ist. Hier ist der Dialog mit den Prozesseigenschaften:

process properties dialog

Wenn Sie einen detaillierteren Prüfpfad darüber wünschen, wann und unter welchen Bedingungen ein Prozess gestartet wurde, können Sie sich an ein anderes Sysinternals-Tool namens Process Monitor wenden. Hier können Sie nach Ereignissen "Prozess gestartet" filtern, Informationen zu der Umgebung erhalten, in der der Prozess gestartet wurde, und sehen, welche anderen Ereignisse zu dieser Zeit aufgetreten sind. Es ist ein ziemlich mächtiges Programm. Hier ist der Dialog mit den Ereigniseigenschaften:

event properties dialog

16
Corrodias

Zur Ergänzung von Ryan Ries 'hilfreiche PowerShell-Antwort mit einer kürzeren Alternative über den Parameter -Filter, der auch verwendet Get-CimInstance anstelle des Cmdlets veraltet seit v3 Get-WmiObject .

# Target a process by its PID (process ID) and report its command line, 
# using the PowerShell session's own PID as an example ($PID).
(Get-CimInstance Win32_Process -Filter "ProcessId=$PID").CommandLine

# Alternatively, target process(es) by name (may return multiple processes), 
# using Notepad.exe as an example.
# Select-Object is used to report both the PID and the command line.
Get-CimInstance Win32_Process -Filter "Name='Notepad.exe'" |
  Select-Object ProcessId, CommandLine

Mit dem Parameter -Filter Können Sie im Wesentlichen die WHERE -Klausel einer WQL -Anweisung übergeben, anstatt eine vollständige Abfrageanweisung über zu übergeben -Query.

1
mklement