В базе данных я могу получить список всех запущенных в данный момент процессов и команду 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
.