powershellで関数の返値にゴミが混ざる場合の対応法

〇 環境
・Windows 10 Pro
・VSCode 1.42.1
・PowerShell Core 7.0.0

〇 サンプル


$queue = New-Object System.Collections.Queue

function Add-Queue([String]$item){
     $queue.Enqueue($item)
     return $item
 }

function New-Test([String]$foo, [String]$var, [String]$val){
     Add-Queue $foo
     Add-Queue $var
     Add-Queue $val
     return $queue.Count
 }

New-Test "hoge" "fuga" "gaha"

〇 期待した挙動
3

〇 実際の挙動


hoge
fuga
gaha
3

〇 解決策
・返値を返す関数を呼び出した後に “| Out-Null” を挿入

〇 修正後のサンプル


$queue = New-Object System.Collections.Queue

function Add-Queue([String]$item){
    $queue.Enqueue($item)
    return $item
}

function New-Test([String]$foo, [String]$var, [String]$val){
    Add-Queue $foo | Out-Null
    Add-Queue $var | Out-Null
    Add-Queue $val | Out-Null
    return $queue.Count
}

New-Test "hoge" "fuga" "gaha"

〇 ディスカッション
・単にゴミを返さないだけであればいろいろあるのですが、powershell の文法チェックに引っ掛かります。
ex. 1)

$hoge = Add-Queue $foo
警告内容 : The variable ‘hoge’ is assigned but never
[void] Add-Queue $foo
エラー内容 : Unexpected token ‘Add-Queue’ in expression or statement.

〇 参考
http://winscript.jp/powershell/253
あたりが挙動をうまく説明していると思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です