PowerShellでメソッドの戻り値を標準出力に表示させない

toc目次

PowerShellはメソッドの戻り値が標準出力に表示される

PowerShellでArrayList.Add()などの戻り値のあるメソッドを実行すると、標準出力に戻り値が表示されます。

1
2
3
4
5
6
$array = New-Object System.Collections.ArrayList

$array.Add('A')
$array.Add('B')
$array.Add('C')
$array.Add('D')
> .\sample1.ps1
0
1
2
3

標準出力への表示を抑制する方法

標準出力への表示を抑制するには下記のいずれかの対応を行います。

  1. $nullにリダイレクト
  2. $nullに代入
  3. [void]にキャスト
  4. Out-Nullにパイプ
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$array = New-Object System.Collections.ArrayList

# $nullにリダイレクト
$array.Add('A') > $null

# $nullに代入
$null = $array.Add('B')

# [void]にキャスト
[void]$array.Add('C')

# Out-Nullにパイプ
$array.Add('D') | Out-Null

処理速度について

下記スクリプトを作成し実行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# $nullにリダイレクト
(Measure-Command {$(1..100000) > $null}).TotalMilliseconds

# $nullに代入
(Measure-Command {$null = $(1..100000)}).TotalMilliseconds

# [void]にキャスト
(Measure-Command {[void]$(1..100000)}).TotalMilliseconds

# Out-Nullにパイプ
(Measure-Command {$(1..100000) | Out-Null}).TotalMilliseconds
> .\sample3.ps1
9.9873
8.9755
18.4618
302.981

> .\sample3.ps1
8.5968
12.5923
7.2656
253.1102

> .\sample3.ps1
9.8921
8.4246
15.3558
282.5324

PowerShellのパイプ処理は1ラインづつメモリを読み込んで処理を実施するためメモリ消費量が少なくなる代わりに処理速度が遅くなります。

簡単なスクリプトであれば好みで良いですが、大量のデータを読み込む場合や処理速度が求められる場合は状況に応じて使い分ける必要があります。