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 :

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
}
Déjà, y a des trucs que je ne comprends pas, comme les " > $null" à la fin des appels à Register-ObjectEvent.

Ensuite, ce code ne fonctionne pas, mon objet events (normalement rempli par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 $events = @(Wait-Event)
est vide.

Une idée ?