どう

2017-01-04 2 views
-1

私はこの単純なPowerShellの機能を持っていると言うコンソールに発信者ではなく、機能から値を出力する:私は私のPowerShellスクリプトでそれを使用する場合、私はスクリプトで値を受信したいどう

function testit() { 
    return $true > $null 
} 

Write-Host "testing" 
$thistest = testit 
Write-Host "value = $thistest" 

が、私をそれがコンソールに表示されないようにしてください。

パイプラインで戻り値を保持するにはどうすればよいですか?それをコンソールから隠すだけですか?

> $nullを使用すると、出力が完全に抑制されます。コンソールに表示しないようにしたいだけですが、依然として値が必要です。

+2

Get-ChildItem | Out-Host 

あなたは、このようなフィルタを削除します'return $ true'または' $ true'だけで? – PetSerAl

+0

あなたが何を求めているのか分かりません。通常はコンソールに表示されません。 'function test {$ true}; $ x = test'は画面上の出力を持たず、 '$ x'に戻り値を保持します。 – TessellatingHeckler

+0

関数を呼び出すと戻ります。私が望まないのは、コンソールに 'True'を表示する' return $ true'です。 – bgmCoder

答えて

2

documented PowerShell関数は、キャプチャされていないすべての出力を呼び出し元に返します。呼び出し元が返された値で何もしない場合、PowerShellは自動的にOut-Defaultにそれを渡し、その後Out-Hostに転送します(Don Jonesのthis article参照)。

リダイレクト演算子を関数内の戻り値に使用すると、関数が何も返さないように戻り値が効果的に抑制されます。

あなたはこのような機能を持っている場合:

function testit { 
    return $true 
} 

と自身でそれを呼び出す:

testit 

をPowerShellが暗黙のうちにこれを行います:

効果的

なり
testit | Out-Default 

testit | Out-Host 

あなたは変数

$thistest = testit 

に戻り値をキャプチャする場合は値がコンソールに表示されて何もせずに変数に格納されます。

あなたはOut-Null

testit >$null 
testit | Out-Null 

に出力やパイプ、それをリダイレクトする場合は、戻り値は破棄され、何もコンソールに表示されません。

あなたはOut-Hostにパイプラインの最後に捕捉されていない出力を渡すのPowerShellのデフォルトの動作を防止したい場合は、このようOut-Defaultをオーバーライドすることによってそうすることができます。@PetSerAlがで指摘したように

filter Out-Default { $_ | Out-Null } 

または(このようなコメント):

filter Out-Default {} 

しかし、あなたは再びフィルタを削除するまで、この変更は、現在のスコープ内のすべてのためにOut-Defaultが無効になることに注意してください。フィルタを使用して、明示的にホストコンソールに出力を書き込みしない限り、何も表示されませんアクティブなときは、例えばGet-ChildItemを行う場合:間違って何

Remove-Item function:Out-Default 
+0

すてきな答え!ちょうど私が必要としたいもの。ありがとうございました。 – bgmCoder

+1

何もしない代わりに '$ _'を' Out-Null'にパイプするのはなぜですか( 'function Out-Default {}')? – PetSerAl

+1

@PetSerAl私はあまりにも動作することを実現するために失敗したので。それを指摘してくれてありがとう、私は私の答えを更新しました。 –