À propos de la redirection

Description courte

Explique comment rediriger la sortie de PowerShell vers des fichiers texte.

Description longue

Par défaut, PowerShell envoie la sortie à l’hôte PowerShell. En règle générale, il s’agit de l’application console. Toutefois, vous pouvez diriger la sortie vers un fichier texte, et vous pouvez rediriger la sortie d’erreur vers le flux de sortie standard.

Vous pouvez utiliser les méthodes suivantes pour rediriger la sortie :

  • Utilisez l’applet de commande, qui envoie la Out-File sortie de commande à un fichier texte. En règle générale, vous utilisez l’applet Out-File de commande lorsque vous devez utiliser ses paramètres, tels que le Encoding, Force, Widthou NoClobber les paramètres.

  • Utilisez l’applet de commande, qui envoie la Tee-Object sortie de commande à un fichier texte, puis l’envoie au pipeline.

  • Utilisez les opérateurs de redirection PowerShell. L’utilisation de l’opérateur de redirection avec une cible de fichier équivaut fonctionnellement à la piping avec Out-File aucun paramètre supplémentaire.

Pour plus d’informations sur les flux, consultez about_Output_Streams.

Flux de sortie redirigés

PowerShell prend en charge la redirection des flux de sortie suivants.

Flux # Description Introduite dans Écrire l’applet de commande
1 Succès Flux PowerShell 2.0 Write-Output
2 Erreur Flux PowerShell 2.0 Write-Error
3 Avertissement Flux PowerShell 3.0 Write-Warning
4 Verbose Flux PowerShell 3.0 Write-Verbose
5 Debug Flux PowerShell 3.0 Write-Debug
6 Informations Flux PowerShell 5.0 Write-Information
* Tous les flux PowerShell 3.0

Notes

Il existe également un flux de progression dans PowerShell, mais il ne prend pas en charge la redirection.

Opérateurs de redirection PowerShell

Les opérateurs de redirection PowerShell sont les suivants, où n représente le numéro de flux. Le flux de réussite ( 1 ) est la valeur par défaut si aucun flux n’est spécifié.

Opérateur Description Syntaxe
> Envoyez le flux spécifié à un fichier. n>
>> Ajoutez un flux spécifié à un fichier. n>>
>&1 Redirige le flux spécifié vers le flux de réussite . n>&1

Notes

Contrairement à certains interpréteurs de commandes Unix, vous ne pouvez rediriger que d’autres flux vers le flux de réussite .

Exemples

Exemple 1 : Rediriger les erreurs et la sortie vers un fichier

Cet exemple s’exécute dir sur un élément qui réussit, et celui qui va s’afficher.

dir 'C:\', 'fakepath' 2>&1 > .\dir.log

Il utilise 2>&1 pour rediriger le flux d’erreurs vers le flux de réussite et > envoyer le flux de réussite résultant à un fichier appelé dir.log

Exemple 2 : Envoyer toutes les données de flux de réussite à un fichier

Cet exemple envoie toutes les données de flux de réussite à un fichier appelé script.log.

.\script.ps1 > script.log

Exemple 3 : Envoyer des flux de réussite, d’avertissement et d’erreur dans un fichier

Cet exemple montre comment combiner des opérateurs de redirection pour obtenir un résultat souhaité.

&{
   Write-Warning "hello"
   Write-Error "hello"
   Write-Output "hi"
} 3>&1 2>&1 > P:\Temp\redirection.log
  • 3>&1 redirige le flux d’avertissement vers le flux de réussite .
  • 2>&1 redirige le flux d’erreurs vers le flux de réussite (qui inclut également toutes les données du flux d’avertissement )
  • > redirige le flux de réussite (qui contient désormais les flux d’avertissement et d’erreur ) vers un fichier appelé C:\temp\redirection.log)

Exemple 4 : Rediriger tous les flux vers un fichier

Cet exemple envoie toutes les sorties de flux d’un script appelé script.ps1 à un fichier appelé script.log

.\script.ps1 *> script.log

Exemple 5 : Supprimer toutes les données de flux d’informations et de Write-Host

Cet exemple supprime toutes les données de flux d’informations. Pour en savoir plus sur les applets de commande de flux d’informations , consultez Write-Host et Write-Information

&{
   Write-Host "Hello"
   Write-Information "Hello" -InformationAction Continue
} 6> $null

Exemple 6 : Afficher l’effet des préférences d’action

Les variables et paramètres de préférence d’action peuvent modifier ce qui est écrit dans un flux particulier. Le script de cet exemple montre comment la valeur de $ErrorActionPreference l’impact sur ce qui est écrit dans le flux d’erreurs .

$ErrorActionPreference = 'Continue'
$ErrorActionPreference > log.txt
get-item /not-here 2>&1 >> log.txt

$ErrorActionPreference = 'SilentlyContinue'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt

$ErrorActionPreference = 'Stop'
$ErrorActionPreference >> log.txt
Try {
    get-item /not-here 2>&1 >> log.txt
}
catch {
    "`tError caught!" >> log.txt
}
$ErrorActionPreference = 'Ignore'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt

$ErrorActionPreference = 'Inquire'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt

$ErrorActionPreference = 'Continue'

Lorsque nous exécutons ce script, nous sommes invités quand $ErrorActionPreference il est défini sur Inquire.

PS C:\temp> .\test.ps1

Confirm
Cannot find path 'C:\not-here' because it does not exist.
[Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"): H
Get-Item: C:\temp\test.ps1:23
Line |
  23 |  get-item /not-here 2>&1 >> log.txt
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The running command stopped because the user selected the Stop option.

Lorsque nous examinons le fichier journal, nous voyons les éléments suivants :

PS C:\temp> Get-Content .\log.txt
Continue

Get-Item: C:\temp\test.ps1:3
Line |
   3 |  get-item /not-here 2>&1 >> log.txt
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Cannot find path 'C:\not-here' because it does not exist.

SilentlyContinue
Stop
    Error caught!
Ignore
Inquire

Notes

Les opérateurs de redirection qui n’ajoutent pas de données (> et n>) remplacent le contenu actuel du fichier spécifié sans avertissement.

Toutefois, si le fichier est un fichier en lecture seule, masqué ou système, la redirection échoue. Les opérateurs de redirection d’ajout (>> et n>>) n’écrivent pas dans un fichier en lecture seule, mais ils ajoutent du contenu à un système ou un fichier masqué.

Pour forcer la redirection du contenu vers un fichier système, masqué ou en lecture seule, utilisez l’applet Out-File de commande avec son Force paramètre.

Lorsque vous écrivez dans des fichiers, les opérateurs de redirection utilisent UTF8NoBOM l’encodage. Si le fichier a un encodage différent, la sortie peut ne pas être mise en forme correctement. Pour écrire dans des fichiers avec un encodage différent, utilisez l’applet Out-File de commande avec son Encoding paramètre.

Confusion potentielle avec les opérateurs de comparaison

L’opérateur > ne doit pas être confondu avec l’opérateur de comparaison supérieur à celui-ci (souvent indiqué comme > dans d’autres langages de programmation).

Selon les objets comparés, la sortie utilisée > peut sembler correcte (car 36 n’est pas supérieure à 42).

PS> if (36 > 42) { "true" } else { "false" }
false

Toutefois, une vérification du système de fichiers local peut voir qu’un fichier appelé 42 a été écrit, avec le contenu 36.

PS> dir

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------          1/02/20  10:10 am              3 42

PS> cat 42
36

La tentative d’utilisation de la comparaison < inverse (inférieure à), génère une erreur système :

PS> if (36 < 42) { "true" } else { "false" }
At line:1 char:8
+ if (36 < 42) { "true" } else { "false" }
+        ~
The '<' operator is reserved for future use.
+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RedirectionNotSupported

Si la comparaison numérique est l’opération requise et -lt-gt doit être utilisée. Voir : -gt Opérateur de comparaison

Voir aussi