PowerShellでifの戻り値パイプ出来ないの巻

ifは値を返します
変数に代入できるよ

PS> $v = if ($true) {
        '良いです'
    } else {
        '良くないです'
    }
PS> $v | Write-Host
良いです

一行で書いてなんちゃって三項演算子にもなりますよ

PS> $n = 2
PS> "$($n)は$(if($n % 2){'奇数'}else{'偶数'})です"
2は偶数です

調子に乗ってパイプで渡そうとしました

PS> if ($true) {
        '良いです'
    } else {
        '良くないです'
    } | Write-Host
発生場所 行:5 文字:3
+ } | Write-Host
+   ~
空のパイプ要素は許可されていません。
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : EmptyPipeElement

だめでした
パイプで渡そうとすると空っぽなようです
残念だ…

追記

スクリプトブロックを&で実行すれば、パイプで渡せますよー。

しゅんさんからアドバイスを頂いたぞ!
さっそくやってみよう

PS> & {if ($true) {
        '良いです'
    } else {
        '良くないです'
    }} | Write-Host
良いです

やったね!
そうかそうか即時関数にすれば良かったのか…
いやしかし、値返すのとパイプで渡せるのはイコールではないのね
どういうことなんじゃろね?よくわからんね?
たまにこういうことしたくなるので気をつけよう…

PowerShellでifの戻り値パイプ出来ないの巻」への4件のフィードバック

  1. ダサいですが、スクリプトブロックの実行結果なら、オブジェクトが得られるようです。

    &{ if($true) { ‘良いです’ } else { ‘良くないです’ } } | Write-Host

  2. コメントが何故か残せない、、、。
    スクリプトが原因かな?

    スクリプトブロックを&で実行すれば、パイプで渡せますよー。

    • >コメントが何故か残せない
      なぜかわからないけどスパムフィルタで止まってて承認待ちだったようです…フィルタの誤動作?
      こちらで制御出来るものでもなさそうなので対策出来るかわかんないのですけど、お手数かけさせてしまいすいません…

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中