2

最初は PowerShell ScriptBlock に興奮していましたが、最近はブロック内での実行順序に戸惑いました。例えば:

$test_block = {
  write-host "show 1"
  ps
  write-host "show 2"
  Get-Date
}

$test_block.Invoke() の呼び出しによる出力:

show 1
show 2
<result of command 'ps'>
<result of command 'get-date'>

何かを出力するコマンドが最初に実行されますか?

4

2 に答える 2

3

この動作は、write-hostがパイプラインに出力を配置しないためです。他のコマンドはパイプラインに配置されるため、関数 (呼び出し) が戻るまで画面に出力されません。

期待どおりの動作を得るには、代わりにwrite-outputを使用してください。すべてのコマンドの結果がパイプラインに返されます。

$test_block = {
  write-output "show 1"
  ps
  write-output "show 2"
  Get-Date
}

$test_block.Invoke()
于 2013-10-28T09:01:59.060 に答える