Bonjour à tous,
Sur les conseils de Laurent Dardenne je poste ici ma question.
En PoSH v1, j'utilisais l'add-on PSEventing pour gérer les appels de process externes et récupérer les traces de sortie. Ca marchait nickel.
Maintenant, je suis obligé de passer à PoSH v2, qui introduit la gestion des évènements, bonne nouvelle, donc plus besoin de PSEventing.
J'ai au beaucoup de mal à trouver de la documentation sur la question, et finalement, et finalement, le créateur de PSEventing a modifié mon code pour qu'il fonctionne en PoSH v2, le voici :
Déjà, y a des trucs que je ne comprends pas, comme les " > $null" à la fin des appels à Register-ObjectEvent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 function Launch-Process([System.Diagnostics.Process]$process, [string]$log, [int]$timeout = 0) { #Connect-Event process ErrorDataReceived,OutputDataReceived Register-ObjectEvent -InputObject $process -EventName ErrorDataReceived > $null Register-ObjectEvent -InputObject $process -EventName OutputDataReceived > $null $process.Start() $process.BeginErrorReadLine() $process.BeginOutputReadLine() $ret = $null if($timeout -eq 0) { $process.WaitForExit() $ret = $true } else { if(-not($process.WaitForExit($timeout))) { Log-Message $log WARNING ("The process is not completed, after the specified timeout: " + $timeout) $ret = $false } else { $ret = $true } } #$events = @(Read-Event) $events = @(Wait-Event) foreach($event in $events) { if(-not [string]::IsNullOrEmpty($event.Args.data)) { if($event.Name -eq "OutputDataReceived") { #Log-Message $log Info $event.Args.data Log-Message $log Info $event.SourceEventArgs.data } else { #Log-Message $log ERROR $event.Args.data Log-Message $log ERROR $event.SourceEventArgs.data } } } $process.Close() $ret }
Ensuite, ce code ne fonctionne pas, mon objet events (normalement rempli parest vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $events = @(Wait-Event)
Une idée ?
Partager