[解決済み] PowerShellで出力を無視するためのより良い(クリーンな)方法は?[クローズド]
質問
何かを返すメソッドやコマンドレットがあるけれど、それを使いたくないし、出力もしたくないとします。この2つの方法を見つけました。
Add-Item > $null
[void]Add-Item
Add-Item | Out-Null
あなたは何を使いますか?どちらがより良い/よりクリーンなアプローチですか?なぜですか?
どのように解決するのですか?
私が知っている4つの選択肢について、いくつかテストをしてみたところです。
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
というわけで、私がお勧めするのは
Out-Null
を使うことをお勧めします。 次に重要なのは、私にとっては、可読性でしょう。 私はなんとなく、リダイレクトを
$null
にリダイレクトして、同じように
$null
を使うようになりました。 私は以前は
[Void]
を好むのですが、これはコードをちらっと見るときや新しいユーザーにとっては理解しにくいかもしれません。
へのリダイレクトの方が若干好きかもしれません。
$null
.
Do-Something > $null
編集
stejの再度のコメントの後、私は出力をゴミ箱に入れるオーバーヘッドをよりよく分離するために、パイプラインでいくつかのテストを行うことにしました。
ここに、単純な1000オブジェクトのパイプラインを使ったいくつかのテストがあります。
## 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
この場合
Out-Null
は約 60% のオーバーヘッドがあり
> $null
は約0.3%のオーバーヘッドです。
2017-10-16に追記しました。
私はもともと、別の選択肢を見落としていて
Out-Null
を使用することを見落としていました。
-inputObject
パラメータを使用します。 これを使用するとオーバーヘッドがなくなるように見えますが、構文が異なります。
Out-Null -inputObject ($(1..1000) | ?{$_ -is [int]})
そして今度は、シンプルな100個のオブジェクトのパイプラインを使ったテストです。
## 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
ここでも
Out-Null
は約60%のオーバーヘッドを持ちます。 一方
> $null
は約4%のオーバーヘッドです。 この数字は、テストによって多少異なります(それぞれを5回ほど実行し、中間を選びました)。 しかし、私はこれが
Out-Null
.
関連
-
PowerShellのジョブ関連コマンドとタスクの並列実行の解説
-
Win Server 2008 R2のためのPowerShellマネジメント
-
PowerShellタイムロギングスクリプト
-
PowerShell は、現在のスクリプトランタイムによって消費されるメモリの動的フェッチを実装しています。
-
PowerShellでプログラム的にIEのキャッシュを空にする
-
Powershellですべてのディスクレターを取得する方法
-
[解決済み] PowerShellでコンソールに書き込むには?
-
[解決済み] nullはなぜオブジェクトなのか、nullとundefinedの違いは何ですか?
-
[解決済み] 現在のPowerShellスクリプトの場所を特定する最良の方法は何ですか?
-
[解決済み] PowerShellで配列のすべてのオブジェクトの1つのプロパティの値を選択する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Powershellスクリプトに電子署名を行う方法
-
PowerShell チュートリアル curl (Invoke-WebRequest) の使用方法について
-
PowerShellでは配列のフィルタリングにmatch演算子を使用する
-
Win Server 2008 R2のためのPowerShellマネジメント
-
スクリプトの記述と実行のためのPowershellの実装
-
Powershellスクリプトの4種類の実行権限についてご紹介します。
-
PowerShellにおける関数のオーバーロードの例
-
PowerShelプログラム実行後、スクリプト自体を削除する方法
-
PowerShellでPrintManagementを使用してプリンターを管理する例
-
バッチ処理ではなくPowerShellを使おう!