2 votes

Powershell : comment rediriger stdout et stderr vers un fichier et une console séparément ?

Comment rediriger stdout et stderr vers un fichier ou une console ? séparément dans PowerShell ?

En parcourant tous les sites, je constate qu'il existe essentiellement deux méthodes, mais qu'AUCUNE d'entre elles ne peut satisfaire pleinement le besoin.

  1. & .\test.ps1 2>&1 | tee .\out.txt

Dans ce cas, stdout et stderr peuvent toujours être affichés sur la console, mais ils seront combinés. dans le même fichier

  1. & .\test.ps1 2>error.txt | tee out.txt

Voici la solution que j'ai trouvée dans SilverNak . Cependant, comme il l'a dit, stderr ne sera pas affiché sur la console.

1voto

mklement0 Points 12597

Pour afficher les résultats de la réussite et du flux d'erreurs dans la console et de la capturer dans des fichiers spécifiques au flux, un travail supplémentaire est nécessaire :

# Create / truncate the output files
$null > out.txt
$null > error.txt

# Call the script and merge its output and error streams.
& .\test.ps1 2>&1 | ForEach-Object {
  # Pass the input object through (to the console). 
  $_
  # Also send the input object to the stream-specific output file.
  if ($_ -is [System.Management.Automation.ErrorRecord]) { $_ >> error.txt }
  else                                                   { $_ >> out.txt }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X