Question Rediriger la sortie d'un processus

Plus d'informations
il y a 11 ans 4 mois #18388 par Hardware
Bonjour,

j'essaye depuis quelques jours de rediriger la sortie d'un processus dans une RichTextBox avec Powershell mais sans succès...

Voici le code :

[code:1]
$process = New-Object System.Diagnostics.Process
$process.StartInfo.Filename = \"scanstate.exe\"
$process.StartInfo.Arguments = \" $storePath /i:$MIGUSERPATH /v:$VERBOSITY /ue:*\* /ui:NTKD0\$username /encrypt:$ENCRYPTION /keyfile:$KEYPATH$username.key /c\"
$process.StartInfo.CreateNoWindow = $true
$process.StartInfo.UseShellExecute = $false
$process.StartInfo.RedirectStandardError = $true
$process.StartInfo.RedirectStandardOutput = $true

Register-ObjectEvent -InputObject $process -EventName OutputDataReceived -action {
if (-not [string]::IsNullOrEmpty($EventArgs.data))
{
$LogBox.AppendText([Environment]::NewLine + $EventArgs.data)
}
} | Out-Null

Register-ObjectEvent -InputObject $process -EventName ErrorDataReceived -action {
if (-not [string]::IsNullOrEmpty($EventArgs.data))
{
$LogBox.AppendText([Environment]::NewLine + $EventArgs.data)
}
} | Out-Null

$process.start()
$process.BeginOutputReadLine()
$process.BeginErrorReadLine()

while ( ! $process.HasExited)
{
[System.Windows.Forms.Application]::«»DoEvents()
}[/code:1]

Le processus tourne correctement, pas de soucis à ce niveau là mais par contre la sortie du process n'apparait pas dans la RichTextBox. J'ai essayé DataReceivedEventHandler avec une fonction déléguée mais je n'arrive pas à implémenter correctement ce système avec powershell.

stackoverflow.com/questions/6521475/how-...nsole-to-richtextbox

Avez-vous une idée, une piste pour m'aider ?
Merci d'avance :)<br><br>Message édité par: Hardware, à: 13/11/14 10:04

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

Plus d'informations
il y a 11 ans 4 mois #18391 par Laurent Dardenne
Salut,
une réponse rapido, ton code de redirections fonctionne-t-il hors d'un GUI ?
Essaie en modifiant la portée du composant en Global.

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 4 mois #18392 par Hardware
Oui ça fonctionne hors GUI avec par exemple : System.Text.StringBuilder

[code:1]echo $oStdOut.ToString().Trim();[/code:1]

Mais en fait mon code ne peut absolument pas fonctionner en l'état parce que l'interface ne s'exécute pas dans le même thread que le processus.

La solution donnée sur stackoverflow fonctionne en C#

stackoverflow.com/questions/6521475/how-...nsole-to-richtextbox

Mais j'arrive pas à implémenter la solution en powershell au niveau du BeginInvoke et de l'utilisation la méthode DataReceivedEventHandler.

Message édité par: Hardware, à: 13/11/14 10:53<br><br>Message édité par: Hardware, à: 13/11/14 10:55

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

Plus d'informations
il y a 11 ans 4 mois #18393 par Laurent Dardenne
Hardware écrit:

Mais j'arrive pas à implémenter la solution en powershell au niveau du BeginInvoke et de l'utilisation la méthode DataReceivedEventHandler.

Il faut sortir la caisse à outils pour ça.
Une exemple Winform et un autre WPF .
Hardware écrit:

La solution donnée sur stackoverflow fonctionne en C#

Oui, on aimerait bien que cela soit aussi simple en PS ;)

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 4 mois #18394 par Hardware
Super merci pour ces deux exemples, je ne connaissais pas ce système de Runspace. Je vais prendre le temps de bien lire tout ça.

Par contre tu aurais pas un ptit exemple un peu plus simple à appréhender, j'ai pas encore beaucoup d'expérience en Powershell. Je me demande même si je peux intégrer facilement les exemples avec HashTable à partir Powershell Studio 2014, c'est l'éditeur que j'utilise.

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

Plus d'informations
il y a 11 ans 4 mois #18395 par Laurent Dardenne
Hardware écrit:

Je vais prendre le temps de bien lire tout ça.

Vaut mieux :-)
Hardware écrit:

Par contre tu aurais pas un ptit exemple un peu plus simple à appréhender

A mon avis c'est un domaine où il n'y a pas de 'petit' exemple, c'est comme la parachute quand faut sauter, faut sauter.
Si c'est plus 'simple', pas besoin de Runspace.
C'est le principe qu'il faut comprendre et sa mise en œuvre.
Un tutoriel sur le sujet, mais si tu débutes avec PS, je doute que tu en retires qq chose.
A toi de voir.
Hardware écrit:

j'ai pas encore beaucoup d'expérience en Powershell.

Tu ne commences pas par le plus simple, même si le ton besoin l'est.
Hardware écrit:

Je me demande même si je peux intégrer facilement les exemples avec HashTable à partir Powershell Studio 2014

Je pense que tu n'auras pas de soucis de côté là et au pire tu exécutes ton script dans une console.

Tutoriels PowerShell

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

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