3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PowerShellスクリプトでパイプ受け入れする

Posted at

PowerShell スクリプトで標準入力から受け入れるとかあまりやらないので、備忘録として残しておきます。
使い方などなどはソースを見てくださいw<おい!

ポイントは[CmdletBinding()]で明示してやらないと受け入れることができないというところかな。

使い方はこんな感じ。オプションは必要な時だけつければいい格好。

cat ".\Sample.json" | .\StdinPipe.ps1 -RequireParam "必須パラメータ"
# StdinPipe.ps1 [-InputObject] <string[]> [-ReqireParam] <string> [[-OptionalParam] <string>] [<CommonParameters>]
[CmdletBinding()]
param (
    [parameter(Mandatory=$true,ValueFromPipeline=$true,HelpMessage="標準入力か引数で受け取るデータ")]
    [string[]]$InputObject,
    [parameter(Mandatory=$true,ValueFromPipeline=$false,HelpMessage="必須パラメータ")]
    [string]$ReqireParam,
    [parameter(Mandatory=$false,ValueFromPipeline=$false,HelpMessage="オプションパラメータ")]
    [string]$OptionalParam
)
begin{
    # 初期化処理等はここに書く
    Set-StrictMode -Version Latest
    [string[]]$inputParam = @()

    # 関数はここに記述して置くと分離できて見やすいのかな?
    function Func( [Object]$dispParam ){
        $dispParam | Out-String
    }
}
process{
    Write-Verbose "Called-`"$InputObject`""
    $inputParam += $InputObject
}
end{
    # ここをメイン関数みたいに使うのがすっきりする

    # $inputParam は sting[]なのでそのままでは Write-Verbose出来ないため文字列に変換してやる
    # パターン1
    Write-Verbose "`$stringValue = Func `$inputParam; Write-Verbose `$stringValue"
    $stringValue = Func $inputParam
    Write-Verbose $stringValue
    # パターン2
    Write-Verbose "Write-Verbose `"`$inputParam`""
    Write-Verbose "$inputParam"

    # さらにパイプをつなぐような場合は、つぎに渡すオブジェクトを return。仕様は明確に!
    return $inputParam
    # バッチファイルのように失敗を明確化して返したい場合はexitを呼び出してやる($LASTEXITCODEで値が取れるようになる)
    # exit 数値
}

おまけ

Write-Verbose は文字列しか受け取ってくれないので、複数行の場合はあらかじめOut-Stringするか、""でくくってやらないとだめ。

3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?