Назад | Перейти на главную страницу

Учитывая PID в Windows - как мне найти инструкцию командной строки, которая его выполнила?

В базе данных я могу получить список всех запущенных в данный момент процессов и команду sql, которая их запустила.

Я хотел бы сделать то же самое в окне Windows.

Я могу получить список процессов, но не командную строку, которая их запустила.

У меня вопрос: Учитывая PID в Windows - как мне найти инструкцию командной строки, которая его выполнила?

Предположения:

Powershell и WMI.

Get-WmiObject Win32_Process | Select ProcessId,CommandLine

Или

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

Обратите внимание, что у вас должны быть разрешения для доступа к этой информации о процессе. Таким образом, вам, возможно, придется запустить команду от имени администратора, если процесс, о котором вы хотите знать, выполняется в привилегированном контексте.

Вы можете использовать подсистему WMI, используя WMIC.EXE, чтобы получить эту информацию. Предполагая, что PID равен 600:

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

Вы также можете выполнить поиск по названию или другой характеристике процесса. Используйте эту команду для вывода списка всех атрибутов:

wmic.exe path Win32_Process get  /format:list

Другие ответы, безусловно, являются хорошими вариантами, которые хорошо послужат вам в автоматизированной системе из-за их характера командной строки (и я вижу по тегу, что вы хотели). Конечно, некоторые люди могут захотеть изучить такую ​​информацию с помощью графического интерфейса, так что вот альтернатива в этом направлении.

Process Explorer - это инструмент Sysinternals, поддерживаемый Microsoft. Он может отображать командную строку процесса в диалоговом окне свойств процесса, а также родительский элемент, который его запустил, хотя имя этого процесса может быть недоступно. Вот диалог свойств процесса:

Если вам нужен более подробный контрольный журнал, когда процесс был запущен и при каких условиях, вы можете обратиться к другому инструменту Sysinternals под названием Process Monitor. Здесь вы можете отфильтровать события «Процесс запущен», узнать о среде, в которой был запущен процесс, и увидеть, какие еще события происходили в это время. Это довольно мощная программа. Вот диалог свойств события:

Дополнять Полезный ответ Райана Райса по PowerShell с более короткая альтернатива через -Filter параметр это также использует Get-CimInstance вместо устаревший-с-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

В -Filter параметр по существу позволяет вам передать WHERE пункт WQL оператор вместо передачи полного оператора запроса через -Query.