ja-JP/about_Pipelines.help.txt
|
TOPIC about_Pipelines 簡単な説明 パイプラインは、複数のコマンドをパイプ演算子 (|) でつないで、 あるコマンドの出力を次のコマンドの入力として渡すしくみです。 (PSHelpJaJP 日本語パッチ版) 詳細な説明 パイプラインとは、パイプ演算子 (|) で連結された一連のコマンドの ことです。各パイプ演算子は、直前のコマンドの結果を次のコマンドへ 送ります。 コマンドは左から右へ順番に処理され、出力は生成された順に表示 されます。PowerShell はパイプライン内のオブジェクトを「1 つずつ」 処理します。これは、コレクション全体をパラメーターとして一括で 渡す場合と大きく異なる点です。 パイプラインの基本的な構文は次のとおりです。 Command-1 | Command-2 | Command-3 例として、次のパイプラインは 4 つの処理を連結し、ファイルを 絞り込み、並べ替え、表として整形します。 Get-ChildItem -Path *.txt | Where-Object {$_.Length -gt 10000} | Sort-Object -Property Length | Format-Table -Property Name, Length 上の例では、まず .txt ファイルを取得し、サイズが 10000 バイトを 超えるものだけを抽出し、サイズ順に並べ替えてから表示しています。 パイプラインによるパラメーターのバインド あるコマンドがパイプライン入力を受け取るには、次の 3 つの条件を すべて満たす必要があります。 1. そのパラメーターがパイプライン入力を受け付けること 2. そのパラメーターが、送られてくるオブジェクトの型を 受け付けること 3. そのパラメーターがコマンド内で既に指定されていないこと パイプライン入力を受け付ける方法には 2 種類あります。 ByValue (値による) パラメーターが、想定する .NET 型、または変換可能な型に 一致する値を受け取ります。 ByPropertyName (プロパティ名による) 入力オブジェクトに、パラメーター名と同じ名前のプロパティが ある場合にのみ、その値を受け取ります。 例: # 文字列 "Notepad" が ByValue で -Name にバインドされる "Notepad" | Get-Process # Name プロパティを持つオブジェクトが # ByPropertyName で -Name にバインドされる [pscustomobject]@{ Name = "pwsh" } | Get-Process エラーの調査 バインドに失敗すると、PowerShell はパイプされたオブジェクトを 受け取り側のパラメーターに関連付けできません。Trace-Command コマンドレットを使うと、実行中のパラメーターバインドを追跡して 原因を調べられます。 Trace-Command -Name ParameterBinding -PSHost -Expression { "test" | Get-Process } 行の継続 パイプラインは複数行に分割して書けます。行末にパイプ演算子を 置く方法のほか、PowerShell 7 以降では次の行の先頭にパイプ演算子 を置く方法も使えます。 Get-ChildItem | Where-Object Name -like "*.txt" | Sort-Object Length 注意 パイプラインはオブジェクトを 1 つずつ流すため、大量のデータでも メモリ効率よく処理できます。一方、Format-* コマンドレットは表示用 の整形オブジェクトを生成するため、原則としてパイプラインの最後に 置いてください。 関連項目 about_Command_Syntax about_Objects about_Parameters about_Operators Where-Object Sort-Object Trace-Command ---- 原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP |