Windows PowerShell fournit plusieurs applets de commande qui vous permettent de contrôler directement la sortie des données. Ces applets de commande partagent deux caractéristiques importantes.

En premier lieu, elles transforment généralement des données en texte. Elles le font parce qu'elles produisent des données destinées à des composants système qui requièrent du texte en entrée. Cela signifie qu'elles doivent représenter les objets sous forme de texte. Par conséquent, le texte est mis en forme tel que vous le voyez dans la fenêtre de la console Windows PowerShell.

En second lieu, ces applets de commande utilisent le verbe Windows PowerShell Out, car elles font sortir les informations de Windows PowerShell. L'applet de commande Out-Host ne constitue pas une exception : la fenêtre de l'hôte s'affiche en dehors de Windows PowerShell. Ce point est important, car lorsque des données sont envoyées à l'extérieur de Windows PowerShell, elles sont en fait supprimées. Vous pouvez l'observer si vous essayez de créer un pipeline qui pagine des données pour leur envoi à la fenêtre de l'hôte, puis tentez une présentation sous forme de liste, comme illustré ici :

PS> Get-Process | Out-Host -Paging | Format-List

Vous pouvez vous attendre à ce que la commande affiche des pages d'informations de processus dans un format de liste. À la place, 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
...

L'applet de commande Out-Host envoie les données directement à la console, de sorte que la commande Format-List ne reçoit rien à mettre en forme.

La façon correcte de structurer cette commande consiste à placer l'applet de commande Out-Host à la fin du pipeline, comme indiqué ci-dessous. Les données de processus sont alors présentées sous forme de liste avant d'être paginées et affichées.

PS> 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
...

Cette règle est valable pour toutes les applets de commande Out. Une applet de commande Out doit toujours apparaître à la fin du pipeline.

Remarque :

Toutes les applets de commande Out restituent la sortie sous forme de texte, en utilisant la mise en forme en vigueur pour la fenêtre de la console, y compris en ce qui concerne les limites de longueurs de lignes.

Pagination de la sortie de la console (Out-Host)

Par défaut, Windows PowerShell envoie les données à la fenêtre de l'hôte, ce que fait exactement l'applet de commande Out-Host. Comme nous l'avons vu précédemment, l'applet de commande Out-Host sert principalement à paginer les données. Par exemple, la commande suivante utilise Out-Host pour paginer la sortie de l'applet de commande Get-Command :

PS> Get-Command | Out-Host -Paging

Vous pouvez également utiliser la fonction more pour paginer des données. Dans Windows PowerShell, more est une fonction qui appelle Out-Host -Paging. La commande suivante montre l'utilisation de la fonction more pour paginer la sortie de Get-Command :

PS> Get-Command | more

Si vous incluez un ou plusieurs noms de fichiers comme arguments de la fonction more, celle-ci lira les fichiers spécifiés et paginera leur contenu en vue de leur envoi à l'hôte :

PS> more c:\boot.ini
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
...

Suppression de la sortie (Out-Null)

L'applet de commande Out-Null est conçue pour supprimer immédiatement toute entrée qu'elle reçoit. Cela est particulièrement utile pour supprimer les données inutiles que vous obtenez comme effet secondaire de l'exécution d'une commande. Lorsque vous tapez la commande suivante, vous ne récupérez rien de la commande :

PS> Get-Command | Out-Null

L'applet de commande Out-Null ne supprime pas la sortie d'erreurs. Par exemple, si vous entrez la commande suivante, un message s'affiche pour vous informer que Windows PowerShell ne reconnaît pas « Is-NotACommand » :

PS> Get-Command Is-NotACommand | Out-Null
Get-Command : 'Is-NotACommand' is not recognized as a cmdlet, function, operabl
e program, or script file.
At line:1 char:12
+ Get-Command  <<<< Is-NotACommand | Out-Null

Impression de données (Out-Printer)

Vous pouvez imprimer des données à l'aide de l'applet de commande Out-Printer. L'applet de commande Out-Printer utilisera votre imprimante par défaut si vous ne fournissez pas de nom d'imprimante. Vous pouvez utiliser n'importe quelle imprimante Windows en spécifiant son nom d'affichage. Il n'est pas nécessaire d'effectuer un quelconque mappage de port d'imprimante, ni même de disposer d'une imprimante physique. Par exemple, si vous avez installé les outils Microsoft Office Document Imaging, vous pouvez envoyer les données à un fichier image en tapant :

PS> Get-Command Get-Command | Out-Printer -Name "Microsoft Office Document Image Writer"

Enregistrement de données (Out-File)

Vous pouvez envoyer la sortie à un fichier plutôt qu'à la fenêtre de la console en utilisant l'applet de commande Out-File. La ligne de commande suivante envoie une liste de processus au fichier C:\temp\processlist.txt :

PS> Get-Process | Out-File -FilePath C:\temp\processlist.txt 

Le résultat de l'utilisation de l'applet de commande Out-File peut ne pas être celui auquel vous vous attendez si vous êtes habitué à la redirection de sortie traditionnelle. Pour comprendre son comportement, vous devez connaître le contexte dans lequel opère l'applet de commande Out-File.

Par défaut, l'applet de commande Out-File crée un fichier Unicode. Ce comportement par défaut est le meilleur sur le long terme, mais il signifie que les outils qui attendent des fichiers ASCII ne fonctionneront pas correctement avec le format de sortie par défaut. Vous pouvez définir le format de sortie par défaut comme étant ASCII au moyen du paramètre Encoding :

PS> Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII

Out-file met en forme le contenu des fichiers de sorte qu'il ressemble à la sortie de la console. La sortie est donc tronquée de la même manière que dans une fenêtre de console dans la plupart des cas. Par exemple, si vous exécutez la commande suivante :

PS> Get-Command | Out-File -FilePath c:\temp\output.txt

La sortie ressemblera à celle-ci :

CommandType     Name                            Definition                     
-----------     ----                            ----------                     
Cmdlet          Add-Content                     Add-Content [-Path] <String[...
Cmdlet          Add-History                     Add-History [[-InputObject] ...
...

Pour obtenir une sortie qui ne force pas le renvoi à la ligne pour l'adaptation à la largeur de l'écran, vous pouvez utiliser le paramètre Width afin de spécifier la largeur de ligne. Width étant un paramètre entier 32 bits, la valeur maximale qu'il peut avoir est 2147483647. Tapez ce qui suit pour définir la largeur de ligne sur cette valeur maximale :

Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647

L'applet de commande Out-File est très utile lorsque vous souhaitez enregistrer la sortie telle qu'elle se serait affichée sur la console. Pour un meilleur contrôle sur le format de sortie, vous avez besoin d'outils plus élaborés. Nous nous y intéresserons dans le chapitre suivant, où nous fournirons également des informations sur la manipulation des objets.




Table des matières