4

スクリプト「test.ps1:」について考えてみます。

Get-EventLog -list | gm

Powershellコンソール("。\test.ps1")から呼び出されると、期待どおりにメンバーが出力されます。

ただし、次のスクリプトは「Get-EventLog -list|gm」からの出力を表示しません。

スクリプト1

Get-EventLog -list | gm
break

スクリプト2

Get-EventLog -list | gm

$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "Continua execucao"
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "Cancela operacao"
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)
$result = $host.ui.PromptForChoice("Title", "Message", $options, 0) 

「Get-EventLog-list|gm」を「HelloWorld」のようなテキストに変更すると、どちらの場合も正しく表示されます。

コマンドレットからの出力が表示されないのはなぜですか?

4

1 に答える 1

2

PowerShellパイプラインに関するいくつかの記事を調べました。使用されるコマンドレットはオブジェクトのコレクションを返し、PowerShellのデフォルトの動作は出力を画面に転送することです。

この記事では、breakステートメントがパイプラインを中断する(実際には、親ループが見つかるまで実行を中断する)ことを説明し、最初の例の動作を説明します。

2番目の例については、PowerShellは、スクリプトの実行の最後にコンソールにリダイレクトするようにデフォルト設定されるだけだと思います。$ host.ui.PromptForChoiceは、最初のコマンドレット呼び出しの出力を使用せず、独自の出力を生成するため、Get-EventLogの結果は破棄されます。

現状では、@ Christianが言ったように、常に「Out-Host」を使用するのが道です。

于 2013-01-16T11:48:40.673 に答える