- 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 7 mois 1 semaine #34059
par Gabriel
Bonjour
pour des raison de journalisation/debug, j'aimerais recuperer la ligne de commande exécuté par start-process:
si j'exécute la commande en l'envoyant dans une variable $UnrarExecution avec l'option -Passthru, dans l'objet il y a une propriété commandline mais qui est vide
par contre si je met le mode verbose il y a alors
et donc comme le titre l'indique j'aimerais mettre dans un journal C:\Program Files\WinRAR\UnRAR.exe x -inul "D:\test\3_fail1.rar" "D:\Temp" en meme temps que le resultat pour debug plus tard.
l'option verbose s'affiche à l'ecran, et je n'ai besoin que de la ligne de commande.
merci d'avance et bonne journée
Tonic8
pour des raison de journalisation/debug, j'aimerais recuperer la ligne de commande exécuté par start-process:
$splatUnrar = @{
FilePath = $Unrar
Argumentlist = 'x -inul "{0}" "{1}"' -f $RARFile.FullName,$TempFolder
Wait = $True
NoNewWindow = $True
PassThru = $True
}
$UnrarExecution = Start-Process @splatUnrar
si j'exécute la commande en l'envoyant dans une variable $UnrarExecution avec l'option -Passthru, dans l'objet il y a une propriété commandline mais qui est vide
par contre si je met le mode verbose il y a alors
VERBOSE: Performing the operation "Start-Process" on target "C:\Program Files\WinRAR\UnRAR.exe x -inul "D:\test\3_fail1.rar" "D:\Temp"".
et donc comme le titre l'indique j'aimerais mettre dans un journal C:\Program Files\WinRAR\UnRAR.exe x -inul "D:\test\3_fail1.rar" "D:\Temp" en meme temps que le resultat pour debug plus tard.
l'option verbose s'affiche à l'ecran, et je n'ai besoin que de la ligne de commande.
merci d'avance et bonne journée
Tonic8
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
- Hors Ligne
- Modérateur
il y a 7 mois 1 semaine #34061
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Récuperer la ligne de commande réellement exécuté par Start-Process
Bonjour Gabriel, ça faisait longtemps ! Ravi de te revoir dans notre forum !
Je n'aime pas trop la solution que je vais te proposer car elle me semble être un peu de la bidouille et je pense qu'il doit y exister une autre technique. Mais bon, je vais te la donner quand même...
L'idée à laquelle je pense est de rediriger le flux verbose dans un fichier. Ensuite, tu n'aura plus qu'à extraire ta ligne de texte depuis ton fichier.
Le flux Verbose est le flux portant le numéro 4. Cela se fait ainsi :
Qu'en penses-tu ?
Arnaud
Je n'aime pas trop la solution que je vais te proposer car elle me semble être un peu de la bidouille et je pense qu'il doit y exister une autre technique. Mais bon, je vais te la donner quand même...
L'idée à laquelle je pense est de rediriger le flux verbose dans un fichier. Ensuite, tu n'aura plus qu'à extraire ta ligne de texte depuis ton fichier.
Le flux Verbose est le flux portant le numéro 4. Cela se fait ainsi :
Write-Verbose 'Coucou, ceci est un test' -verbose 4> ./testverbose.txt
Qu'en penses-tu ?
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Christophe MELIN
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 26
- Remerciements reçus 4
il y a 7 mois 1 semaine - il y a 7 mois 1 semaine #34062
par Christophe MELIN
Réponse de Christophe MELIN sur le sujet Récuperer la ligne de commande réellement exécuté par Start-Process
Bonjour,
autre solution pas testée car je dois partir rapidement
1) executer la commande start-process avec le paramètre passthru
$proc = start-process -passthru ...
2) dans l'objet récupéré, il y a une propriété ID qui correspond au process ID
3) exécuter une requête WMI
$objWMI = Get-WmiObject -Class win32_process -Filter "processid=$($proc.id)"
4) l'objet objWMI a une propriété CommandLine qui contient la ligne de commande
A+
autre solution pas testée car je dois partir rapidement
1) executer la commande start-process avec le paramètre passthru
$proc = start-process -passthru ...
2) dans l'objet récupéré, il y a une propriété ID qui correspond au process ID
3) exécuter une requête WMI
$objWMI = Get-WmiObject -Class win32_process -Filter "processid=$($proc.id)"
4) l'objet objWMI a une propriété CommandLine qui contient la ligne de commande
A+
Dernière édition: il y a 7 mois 1 semaine par Christophe MELIN.
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 7 mois 3 jours #34076
par Gabriel
Réponse de Gabriel sur le sujet Récuperer la ligne de commande réellement exécuté par Start-Process
Bonsoir Arnaud
oui ca faisait un bail. merci
alors l'idée me plait quand même, dans le principe je tente de recuperer la ligne de commande générée, et des fois l'ordre ou un espace peut etre manquant, il y a aussi les simple quote et double quote dans les lignes de commandes, par exemple FFMPEG à une bonne tripotée de parametres.
je vais tester et je reviens
oui ca faisait un bail. merci
alors l'idée me plait quand même, dans le principe je tente de recuperer la ligne de commande générée, et des fois l'ordre ou un espace peut etre manquant, il y a aussi les simple quote et double quote dans les lignes de commandes, par exemple FFMPEG à une bonne tripotée de parametres.
je vais tester et je reviens
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 7 mois 3 jours #34077
par Gabriel
Réponse de Gabriel sur le sujet Récuperer la ligne de commande réellement exécuté par Start-Process
bonsoir Christophe
je vais essayer, mais... je suis pas sur que l'analyse de l'id soit possible si le process est terminé.
je vais essayer, mais... je suis pas sur que l'analyse de l'id soit possible si le process est terminé.
Connexion ou Créer un compte pour participer à la conversation.
- Christophe MELIN
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 26
- Remerciements reçus 4
il y a 7 mois 2 jours - il y a 7 mois 2 jours #34078
par Christophe MELIN
Réponse de Christophe MELIN sur le sujet Récuperer la ligne de commande réellement exécuté par Start-Process
Si tu fais la commande "$process = e start-process ... -passthru", tu récupères directement les informations dès la création du process donc il existe forcément. Après, même s'il se termine rapidement, cela ne supprime pas l'objet $process dans la session powershell. Mais c'est vrai que si le process se termine tès vite, on n'a pas forcément le temps de lancer la commande wmi.
Finalement, je crois qu'on peut s'en sortir sans passer par WMI.
Dans l'objet $process, il y a une propriété startupInfo qui est un objet avec une propriété Arguments. Cette propriété contient la concaténation des paramètres exacte faite par start-process.
Exemple : je passe la commande powershell suivante
$process = start-process notepad.exe -passthru -argumentlist 'd:\temp\toto.txt', '"titi" "toto"', "encore un argument"
alors, le résultat de $process.startupinfo | fl * est
Pour avoir une idée assez proche de la ligne de commande générée par powershell avec start-process, tu concatènes les infos :
$CommandLine = "`"$($process.startinfo.filename)`" $($process.startinfo.arguments)"
Finalement, je crois qu'on peut s'en sortir sans passer par WMI.
Dans l'objet $process, il y a une propriété startupInfo qui est un objet avec une propriété Arguments. Cette propriété contient la concaténation des paramètres exacte faite par start-process.
Exemple : je passe la commande powershell suivante
$process = start-process notepad.exe -passthru -argumentlist 'd:\temp\toto.txt', '"titi" "toto"', "encore un argument"
alors, le résultat de $process.startupinfo | fl * est
[size=50]Verb :[/size]
[size=85][b]Arguments : d:\temp\toto.txt "titi" "toto" encore un argument[/b][/size]
[size=50]CreateNoWindow : False
EnvironmentVariables : ...
Environment : ...
RedirectStandardInput : False
RedirectStandardOutput : False
RedirectStandardError : False
StandardErrorEncoding :
StandardOutputEncoding :
UseShellExecute : True
Verbs : {open, runas, runasuser, sendtotoys1add...}
UserName :
Password :
PasswordInClearText :
Domain :
LoadUserProfile : True[/size]
[size=85][b]FileName : C:\WINDOWS\system32\notepad.exe[/b][/size]
[size=50]WorkingDirectory : C:\WINDOWS\system32
ErrorDialog : False
ErrorDialogParentHandle : 0
WindowStyle : Normal[/size]
Pour avoir une idée assez proche de la ligne de commande générée par powershell avec start-process, tu concatènes les infos :
$CommandLine = "`"$($process.startinfo.filename)`" $($process.startinfo.arguments)"
Dernière édition: il y a 7 mois 2 jours par Christophe MELIN.
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.115 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