Résolu Récuperer la ligne de commande réellement exécuté par Start-Process

Plus d'informations
il y a 4 mois 1 semaine - il y a 4 mois 1 semaine #34083 par Gabriel
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 )
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.SafeProcessHandle


et 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 argument


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:

$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 argument


on 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

9866


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
Dernière édition: il y a 4 mois 1 semaine par Gabriel.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 4 mois 1 semaine #34084 par Christophe MELIN
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.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 4 mois 1 semaine - il y a 4 mois 1 semaine #34086 par Gabriel
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)
Dernière édition: il y a 4 mois 1 semaine par Gabriel.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 4 mois 1 semaine #34087 par Christophe MELIN
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
Les utilisateur(s) suivant ont remercié: Gabriel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 4 mois 1 semaine #34091 par Gabriel

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.114 secondes
Propulsé par Kunena