Redirection de la sortie
PowerShell fournit plusieurs applets de commande qui vous permettent de contrôler directement la sortie de données. Ces applets de commande partagent deux caractéristiques importantes.
Tout d’abord, elles transforment généralement les données en une forme de texte. Elles opèrent de la sorte, car elles envoient les données à des composants système qui requièrent une entrée de texte. Cela signifie qu’elles doivent représenter les objets sous forme de texte. C’est pourquoi le texte est mis en forme tel qu’il apparaît dans la fenêtre de la console PowerShell.
Ensuite, ces applets de commande utilisent le verbe PowerShell Out, car elles envoient des informations de PowerShell vers un autre emplacement.
Sortie de la console
Par défaut, PowerShell envoie les données à la fenêtre hôte, ce qui est exactement ce que fait l’applet de commande Out-Host
. La principale utilisation de l’applet de commande Out-Host
est la pagination. Par exemple, la commande suivante utilise l’applet de commande Out-Host
pour paginer la sortie de l’applet de commande Get-Command
:
Get-Command | Out-Host -Paging
L’affichage de la fenêtre hôte se trouve en dehors de PowerShell. Cela est important car, lorsque des données sont envoyées hors de PowerShell, elles sont réellement supprimées. Vous pouvez le constater si vous tentez de créer un pipeline qui pagine les données vers la fenêtre hôte, puis tentez d’appliquer une mise en forme de liste, comme illustré ici :
Get-Process | Out-Host -Paging | Format-List
Vous pouvez vous attendre à ce que la commande affiche des pages d’informations sur le processus sous forme de liste. Au lieu de cela, elle affiche la liste tabulaire par défaut :
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
101 5 1076 3316 32 0.05 2888 alg
...
618 18 39348 51108 143 211.20 740 explorer
257 8 9752 16828 79 3.02 2560 explorer
...
<SPACE> next page; <CR> next line; Q quit
...
Comme l’applet de commande Out-Host
envoie les données directement à la console, la commande Format-List
ne reçoit jamais rien à mettre en forme.
La façon correcte de structurer cette commande est de placer l’applet de commande Out-Host
à la fin du pipeline, comme illustré ci-dessous. Ainsi, les données du processus sont mises en forme de liste avant d’être paginées et affichées.
Get-Process | Format-List | Out-Host -Paging
Id : 2888
Handles : 101
CPU : 0.046875
Name : alg
...
Id : 740
Handles : 612
CPU : 211.703125
Name : explorer
Id : 2560
Handles : 257
CPU : 3.015625
Name : explorer
...
<SPACE> next page; <CR> next line; Q quit
...
Cela s’applique à toutes les applets de commande Out. Une applet de commande Out doit toujours apparaître à la fin du pipeline.
Notes
Toutes les applets de commande Out restituent la sortie en tant que texte, en utilisant la mise en forme applicable à la fenêtre de console, y compris les limites de longueur de ligne.
Ignorer la sortie
L’applet de commande Out-Null
est conçue pour ignorer immédiatement toute entrée qu’elle reçoit. Cela est utile pour ignorer des données superflues que vous recevez suite à l’exécution d’une commande. Lorsque vous tapez la commande suivante, celle-ci ne retourne rien :
Get-Command | Out-Null
L’applet de commande Out-Null
n’ignore pas la sortie d’erreur. Par exemple, si vous entrez la commande suivante, un message s’affiche vous informant que PowerShell ne reconnaît pas « Is-NotACommand
» :
PS> Get-Command Is-NotACommand | Out-Null
Get-Command : 'Is-NotACommand' isn't recognized as a cmdlet, function, operable program, or script file.
At line:1 char:12
+ Get-Command <<<< Is-NotACommand | Out-Null
Impression de données
Out-Printer
est disponible uniquement sur les plateformes Windows.
Vous pouvez imprimer les données à l’aide de l’applet de commande Out-Printer
. Si vous ne fournissez pas de nom d’imprimante, l’applet de commande Out-Printer
utilise votre imprimante par défaut. Vous pouvez utiliser n’importe quelle imprimante Windows en spécifiant son nom d’affichage. Vous n’avez pas besoin de mappage de port d’imprimante ou même d’une imprimante physique réelle.
Par exemple, si les outils de Microsoft Office Document Imaging sont installés, vous pouvez envoyer les données vers un fichier image en tapant ce qui suit :
Get-Command -Name Get-* | Out-Printer -Name 'Microsoft Office Document Image Writer'
Enregistrement des données
Vous pouvez envoyer la sortie vers un fichier au lieu de la fenêtre de console en utilisant l’applet de commande Out-File
. La ligne de commande suivante envoie la liste des processus au fichier C:\temp\processlist.txt
:
Get-Process | Out-File -FilePath C:\temp\processlist.txt
Les résultats de l’utilisation de l’applet de commande Out-File
peuvent ne pas correspondre à ce que vous attendez si vous êtes habitué à la redirection de sortie traditionnelle. Pour comprendre son comportement, vous devez connaître le contexte dans lequel l’applet de commande Out-File
opère.
Dans Windows PowerShell 5.1, la cmdlet Out-File
crée un fichier Unicode. Certains outils, qui attendent des fichiers ASCII, ne fonctionnent pas correctement avec le format de sortie par défaut. Vous pouvez modifier le format de sortie par défaut en ASCII à l’aide du paramètre Encoding:
Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII
Out-file
met en forme le contenu du fichier pour qu’il ressemble à une sortie de la console. Cela a pour effet que, dans la plupart des cas, la sortie est tronquée comme dans une fenêtre de console. Par exemple, si vous exécutez la commande suivante :
Get-Command | Out-File -FilePath c:\temp\output.txt
La sortie se présente ainsi :
CommandType Name Definition
----------- ---- ----------
Cmdlet Add-Content Add-Content [-Path] <String[...
Cmdlet Add-History Add-History [[-InputObject] ...
...
Pour obtenir une sortie qui ne force pas de retour automatique à la ligne pour correspondre à la largeur de l’écran, vous pouvez utiliser le paramètre Width pour spécifier une largeur de ligne. Étant donné que le paramètre Width est un entier 32 bits, il peut atteindre la valeur de 2147483647. Pour définir la largeur de ligne sur cette valeur maximale, tapez la commande suivante :
Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647
L’applet de commande Out-File
est particulièrement utile pour enregistrer la sortie comme si elle était affichée sur la console.