Sur une base de données, je peux obtenir une liste de tous les processus en cours d'exécution et la commande sql qui les a lancés.
Je voudrais faire une chose similaire sur une boîte Windows.
Je peux obtenir la liste des processus, mais pas la ligne de commande qui les a lancés.
Ma question est: Étant donné un PID sous Windows - comment trouver l'instruction de ligne de commande qui l'a exécuté?
Hypothèses:
Powershell et WMI.
Get-WmiObject Win32_Process | Select ProcessId,CommandLine
Ou
Get-WmiObject -Query "SELECT CommandLine FROM Win32_Process WHERE ProcessID = 3352"
Notez que vous devez avoir des autorisations pour accéder à ces informations sur un processus. Vous devrez donc peut-être exécuter la commande en tant qu'administrateur si le processus que vous souhaitez connaître s'exécute dans un contexte privilégié.
Vous pouvez utiliser le sous-système WMI à l'aide de WMIC.EXE pour accéder à ces informations. En supposant un PID de 600:
wmic.exe path Win32_Process where handle='600' get name, commandline /format:list
Vous pouvez également rechercher un nom ou une autre caractéristique du processus. Utilisez cette commande pour répertorier tous les attributs:
wmic.exe path Win32_Process get /format:list
Les autres réponses sont certainement de bonnes options qui vous serviront bien dans un système automatisé en raison de leur nature en ligne de commande (et je vois sur l'étiquette que c'est ce que vous vouliez). Bien sûr, certaines personnes pourraient vouloir explorer ce type d'informations avec une interface graphique, voici donc une alternative dans ce sens.
Process Explorer est un outil Sysinternals géré par Microsoft. Il peut afficher la ligne de commande du processus dans la boîte de dialogue des propriétés du processus ainsi que le parent qui l'a lancé, bien que le nom de ce processus ne soit plus disponible. Voici la boîte de dialogue des propriétés du processus:
Si vous souhaitez une piste d'audit plus détaillée du moment où un processus a été lancé et dans quelles conditions, vous pouvez vous tourner vers un autre outil Sysinternals appelé Process Monitor. Ici, vous pouvez filtrer les événements "Processus démarré", en savoir plus sur l'environnement dans lequel le processus a été lancé et voir quels autres événements se sont produits à cette époque. C'est un programme assez puissant. Voici la boîte de dialogue des propriétés de l'événement:
Pour compléter réponse PowerShell utile de Ryan Ries avec une alternative plus courte via le -Filter
paramètre qui également utilise Get-CimInstance
au lieu de obsolète depuis la v3 Get-WmiObject
applet de commande .
# 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
Le -Filter
Le paramètre vous permet essentiellement de passer la clause WHERE
d'une instruction WQL au lieu de passer une instruction de requête complète via -Query
.