2017年4月18日

【PowerShell】関数でパイプラインから入力を読み込む


パイプラインからの入力を関数で読み取ることが出来ます。

例1

function Get-FileName {
    $input.Name
    Write-Host "ファイルは以上です。"
}

実行結果
PS C:\work\image1> Get-ChildItem | Get-FileName
aaaa.jpg
bbbb.jpg
cccc.jpg
dddd.jpg
eeee.jpg
ffff.jpg
gggg.jpg
ファイルは以上です。
自動変数$inputにパイプラインからの入力オブジェクトが格納され、ファイル名が列挙されます。


例2

begin、process、endキーワードを使うことで、入力されたオブジェクトに対して処理を行うことが出来ます。
例として、入力されたオブジェクトの中で一番大きなサイズのファイルを見つけ出す処理を示します。
function Get-MaxFileSize {
    begin{
        $fileName = ""
        $fileSize = 0
    }
    process{
        Write-Host $_.Name $_.Length
        if ($_.Length -gt $fileSize){
            $fileName = $_.Name
            $fileSize = $_.Length
        }
    }
    end{
        Write-Host "一番大きいファイルは" $fileName  "サイズは" $fileSize "Byteです。"
    }
}

実行結果
PS C:\work\image1> Get-ChildItem | Get-MaxFileSize
aaaa.jpg 425167
bbbb.jpg 245901
cccc.jpg 194315
dddd.jpg 235320
eeee.jpg 852563
ffff.jpg 593126
gggg.jpg 607218
一番大きいファイルは eeee.jpg サイズは 852563 Byteです。
beginブロックは最初の1回だけ呼ばれ、endブロックは最後の1回だけ呼ばれます。
また、自動変数$_にその時の入力オブジェクトが格納されています。



スポンサーリンク