- forum
- PowerShell
- Entraide pour les initiés
- Récuperer la ligne de commande réellement exécuté par Start-Process
Résolu Récuperer la ligne de commande réellement exécuté par Start-Process
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 2 ans 2 semaines - il y a 2 ans 2 semaines #34083
par Gabriel
Réponse de Gabriel sur le sujet Récuperer la ligne de commande réellement exécuté par Start-Process
Alors on s'accroche:
effectivement la propriété Startinfo peut servir, MAIS il y a une propriété "Comandline", c'est donc encore plus simple.
Sauf que dans la commande que je teste "unrar.exe" elle est vide et lorsque j'utilise la même commande que tu donnes en exemple elle est remplie (il y a un hic avec ma commande, mais je l'ai trouvé, on va pas divulgacher la fin du Post )
et donc le resultat donne
mais il y a encore un mais
en fait l'objet $Process qui contient le resultat du passthru semble etre "live" et si le process n'est plus en memoire alors les infos sont vides:
on a les infos
mais si on attend un peu
on aura bien l'id de la tâche mais plus la ligne de commande, meme avec notepad.exe,
Dans mon cas j'attend que le unrar se finisse avec le -wait, et visiblement la propriete n'est pas recuperable si on attend ...
donc finalement la "meilleure" solution pour mes besoin de debug c'est la capture du mode verbose, car la ligne doit etre générée avant que le process ne commence.
Comme l'a dit Arnaud c' est un peu bidouille quand même.
merci à vous 2
Gabriel
effectivement la propriété Startinfo peut servir, MAIS il y a une propriété "Comandline", c'est donc encore plus simple.
Sauf que dans la commande que je teste "unrar.exe" elle est vide et lorsque j'utilise la même commande que tu donnes en exemple elle est remplie (il y a un hic avec ma commande, mais je l'ai trouvé, on va pas divulgacher la fin du Post )
Name : notepad
Id : 6024
PriorityClass : Normal
FileVersion : 10.0.19041.3691 (WinBuild.160101.0800)
HandleCount : 202
WorkingSet : 12304384
PagedMemorySize : 2846720
PrivateMemorySize : 2846720
VirtualMemorySize : 159612928
TotalProcessorTime : 00:00:00.0312500
SI : 1
Handles : 202
VM : 2203477835776
WS : 12304384
PM : 2846720
NPM : 12080
Path : C:\WINDOWS\system32\notepad.exe
CommandLine : "C:\WINDOWS\system32\notepad.exe" d:\temp\toto.txt "titi" "toto" encore un argument
Parent : System.Diagnostics.Process (pwsh)
Company : Microsoft Corporation
CPU : 0,0625
ProductVersion : 10.0.19041.3691
Description : Bloc-notes
Product : Système d’exploitation Microsoft® Windows®
__NounName : Process
SafeHandle : Microsoft.Win32.SafeHandles.SafeProcessHandleet donc le resultat donne
$process = start-process notepad.exe -passthru -argumentlist 'd:\temp\toto.txt', '"titi" "toto"', "encore un argument"
$process.CommandLine
CommandLine : "C:\WINDOWS\system32\notepad.exe" d:\temp\toto.txt "titi" "toto" encore un argumentmais il y a encore un mais
en fait l'objet $Process qui contient le resultat du passthru semble etre "live" et si le process n'est plus en memoire alors les infos sont vides:
$process = start-process notepad.exe -passthru -argumentlist 'd:\temp\toto.txt', '"titi" "toto"', "encore un argument"
$process.id
$process.CommandLine
8597
"C:\WINDOWS\system32\notepad.exe" d:\temp\toto.txt "titi" "toto" encore un argumenton a les infos
mais si on attend un peu
$process = start-process notepad.exe -passthru -argumentlist 'd:\temp\toto.txt', '"titi" "toto"', "encore un argument"
start-sleep 5
$process.id
$process.CommandLine
9866on aura bien l'id de la tâche mais plus la ligne de commande, meme avec notepad.exe,
Dans mon cas j'attend que le unrar se finisse avec le -wait, et visiblement la propriete n'est pas recuperable si on attend ...
donc finalement la "meilleure" solution pour mes besoin de debug c'est la capture du mode verbose, car la ligne doit etre générée avant que le process ne commence.
Comme l'a dit Arnaud c' est un peu bidouille quand même.
merci à vous 2
Gabriel
Dernière édition: il y a 2 ans 2 semaines par Gabriel.
Connexion ou Créer un compte pour participer à la conversation.
- Christophe MELIN
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 28
- Remerciements reçus 4
il y a 2 ans 2 semaines #34084
par Christophe MELIN
Réponse de Christophe MELIN sur le sujet Récuperer la ligne de commande réellement exécuté par Start-Process
Petite question qu'on aurait du se poser plus tôt :
tu utilises quelle version de powershell ?
J'ai fait un test avec une version 5.1 (sur Windows 10).
l'objet $proc ne contient pas de propriété CommandLine et semble effectivement live car des infos disparaissent si le process n'existe plus. Par contre, la propriété StartInfo n'est pas perdue donc ma concaténation des chaine fonctionne encore.
J'ai fait le même test avec une version 7.4
l'objet a bien une propriété CommandLine avec le bon contenu (idem dans StartInfo) et l'objet est aussi live car si je ferme le notepad, la propriété CommandLine est maintenant vide. Par contre, la propriété StartInfo ne se vide pas donc on peut encore faire la concanétation. Cela me semble cohérent car StartInfo contient les informations utilisés au lancement du process et il n'y a donc pas de raison qu'elles changent pendant la vie du process.
tu utilises quelle version de powershell ?
J'ai fait un test avec une version 5.1 (sur Windows 10).
l'objet $proc ne contient pas de propriété CommandLine et semble effectivement live car des infos disparaissent si le process n'existe plus. Par contre, la propriété StartInfo n'est pas perdue donc ma concaténation des chaine fonctionne encore.
J'ai fait le même test avec une version 7.4
l'objet a bien une propriété CommandLine avec le bon contenu (idem dans StartInfo) et l'objet est aussi live car si je ferme le notepad, la propriété CommandLine est maintenant vide. Par contre, la propriété StartInfo ne se vide pas donc on peut encore faire la concanétation. Cela me semble cohérent car StartInfo contient les informations utilisés au lancement du process et il n'y a donc pas de raison qu'elles changent pendant la vie du process.
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 2 ans 2 semaines - il y a 2 ans 2 semaines #34086
par Gabriel
Réponse de Gabriel sur le sujet Récuperer la ligne de commande réellement exécuté par Start-Process
Bonsoir Christophe
alors je suis en Powershell 7.4.1, et... en fait si tu démarres le Start-Process avec -Wait (on attend que le process finisse) les 2 champs CommandLine et StartInfo, sont vide, si je retire le -wait alors le champs startinfo est rempli.
on est toujours dans le vide (techniquement lors des debug j'utiliserais la solution d'Arnaud mais careste vide quand meme si on veut utiliser des outils comme ceux la) , j'ai besoin que le script fasse le scan des fichier rar un par un (si il ya une erreur je veux pouvoir arreter le process)
alors je suis en Powershell 7.4.1, et... en fait si tu démarres le Start-Process avec -Wait (on attend que le process finisse) les 2 champs CommandLine et StartInfo, sont vide, si je retire le -wait alors le champs startinfo est rempli.
on est toujours dans le vide (techniquement lors des debug j'utiliserais la solution d'Arnaud mais careste vide quand meme si on veut utiliser des outils comme ceux la) , j'ai besoin que le script fasse le scan des fichier rar un par un (si il ya une erreur je veux pouvoir arreter le process)
Dernière édition: il y a 2 ans 2 semaines par Gabriel.
Connexion ou Créer un compte pour participer à la conversation.
- Christophe MELIN
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 28
- Remerciements reçus 4
il y a 2 ans 2 semaines #34087
par Christophe MELIN
Réponse de Christophe MELIN sur le sujet Récuperer la ligne de commande réellement exécuté par Start-Process
En powershell 7.4, il y a maintenant une cmdlet wait-process donc tu peux tester :
$process = start-process "notepad.exe" -argumentlist "toto.txt" -wait:$false -passthru
$commandline = $process.commandline
wait-process -inputobject $process
$error = $process.exitcode
$process = start-process "notepad.exe" -argumentlist "toto.txt" -wait:$false -passthru
$commandline = $process.commandline
wait-process -inputobject $process
$error = $process.exitcode
Les utilisateur(s) suivant ont remercié: Gabriel
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 2 ans 2 semaines #34091
par Gabriel
Réponse de Gabriel sur le sujet Récuperer la ligne de commande réellement exécuté par Start-Process
Et ça marche!
merci
merci
Connexion ou Créer un compte pour participer à la conversation.
- forum
- PowerShell
- Entraide pour les initiés
- Récuperer la ligne de commande réellement exécuté par Start-Process
Temps de génération de la page : 0.095 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- Récuperer la ligne de commande réellement exécuté par Start-Process