160 votes

Quel est le mieux (plus propre) façon d'ignorer la sortie en PowerShell

Disons que vous avez une méthode ou d'une Applet de commande qui retourne quelque chose, mais vous n'avez pas ce que l'utiliser et vous ne voulez pas de sortie. J'ai trouvé ce de deux façons:

Add-Item > $null

[void]Add-Item

Add-Item | Out-Null

EDIT: Merci Ocaso pour la troisième voie.

Qu'utilisez-vous? Qui est le meilleur nettoyeur/approche? Pourquoi?

214voto

JasonMArcher Points 4662

Je viens de faire quelques tests de l'une des quatre options que je le connais.

Measure-Command {$(1..1000) | Out-Null}

TotalMilliseconds : 76.211

Measure-Command {[Void]$(1..1000)}

TotalMilliseconds : 0.217

Measure-Command {$(1..1000) > $null}

TotalMilliseconds : 0.2478

Measure-Command {$null = $(1..1000)}

TotalMilliseconds : 0.2122

## Control, times vary from 0.21 to 0.24
Measure-Command {$(1..1000)}

TotalMilliseconds : 0.2141

Donc, je vous suggère d'utiliser quoi que ce soit, mais Out-Null en raison de la surcharge. La prochaine chose importante, pour moi, serait de lisibilité. J'aime bien la redirection vers $null et de paramètre égal à $null moi-même. J'utilise à préférer la conversion en [Void], mais qui peuvent ne pas être aussi compréhensible quand jetant un coup d'oeil au code ou pour les nouveaux utilisateurs.

Je suppose que j'ai légèrement préfèrent redirection de la sortie d' $null.

Do-Something > $null

Modifier

Après stej commentaire encore une fois, j'ai décidé de faire des tests un peu plus avec les pipelines afin de mieux isoler la surcharge de bousiller la sortie.

Voici quelques tests avec un simple 1000 pipeline de l'objet.

## Control Pipeline
Measure-Command {$(1..1000) | ?{$_ -is [int]}}

TotalMilliseconds : 119.3823

## Out-Null
Measure-Command {$(1..1000) | ?{$_ -is [int]} | Out-Null}

TotalMilliseconds : 190.2193

## Redirect to $null
Measure-Command {$(1..1000) | ?{$_ -is [int]} > $null}

TotalMilliseconds : 119.7923

Dans ce cas, Out-Null à 60% de frais généraux et d' > $null a environ 0,3% de frais généraux.

Et maintenant, pour quelques tests avec un simple 100 pipeline de l'objet.

## Control Pipeline
Measure-Command {$(1..100) | ?{$_ -is [int]}}

TotalMilliseconds : 12.3566

## Out-Null
Measure-Command {$(1..100) | ?{$_ -is [int]} | Out-Null}

TotalMilliseconds : 19.7357

## Redirect to $null
Measure-Command {$(1..1000) | ?{$_ -is [int]} > $null}

TotalMilliseconds : 12.8527

Ici encore, Out-Null à 60% de frais généraux. Alors qu' > $null a une surcharge d'environ 4%. Les chiffres ici varié un peu de test pour tester (je l'ai utilisé environ 5 fois et de chercher un terrain d'entente). Mais je pense que cela montre clairement la raison de ne pas utiliser Out-Null.

20voto

Ocaso Protal Points 6025

Il y a aussi l' Out-Null applet de commande, qui vous pouvez utiliser dans une canalisation, par exemple, Add-Item|Out-Null

NAME
    Out-Null

SYNOPSIS
    Deletes output instead of sending it to the console.


SYNTAX
    Out-Null [-inputObject <psobject>] [<CommonParameters>]


DETAILED DESCRIPTION
    The Out-Null cmdlet sends output to NULL, in effect, deleting it.


RELATED LINKS
    Out-Printer
    Out-Host
    Out-File
    Out-String
    Out-Default

REMARKS
     For more information, type: "get-help Out-Null -detailed".
     For technical information, type: "get-help Out-Null -full".

12voto

stej Points 14257

Je voudrais envisager d'utiliser quelque chose comme:

function GetList
{
  . {
     $a = new-object Collections.ArrayList
     $a.Add(5)
     $a.Add('next 5')
  } | Out-Null
  $a
}
$x = GetList

Sortie d' $a.Add n'est pas retourné -- qui vaut pour toutes les $a.Add des appels de méthode. Sinon vous auriez besoin d'ajouter le préfixe [void] avant chaque appel.

Dans les cas simples, j'irais avec [void]$a.Add parce qu'il est assez clair que la sortie ne sera pas utilisé et est rejetée.

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