2011-12-17 13 views
1

クライアント用のソフトウェアを配布するPowershellスクリプトをいくつか記述しました。私はWrite-Hostを使用して多くの情報を出力し、展開の進行状況を監視し、Start-Transcriptを使用してこの出力をキャプチャする展開アプリケーションの1つから呼び出します。出力コードを表示しない関数でstdoutへの出力

しかし、これらのスクリプトのいくつかをstdoutからの出力しかキャプチャできない別のアプリケーションから呼び出すこともできる必要があります。つまり、Write-Hostはコンソールやホストにのみ出力され、stdoutに出力されないので正しく動作しません。

代わりにWrite-Outを使用するようにコードを変更することができましたが、これは別の問題を引き起こす点を除いて。私は関数を使用しているので、PowerShellの関数はのすべてを呼び出し元にstdoutに渡すので、関数からの出力を取得するコードを壊す可能性があります。

出力をstdoutに直接出力する方法はありますか?関数自体の出力として呼び出しコードに行くことはありませんか?

function Test-Output ([int]$number) { 
    Write-Output "This is a string" 
    return $number 
} 

[int]$someNumber = Test-Output 10 

$someNumber 

PowerShellを割り当てるしようとしているので、あなたは、エラーが表示されます上記のコードを実行した場合、整数$someNumberに「これが文字列である」:ここでは、問題の例があります。変数をstringに変更すると、関数の全出力(これは文字列10)が取り込まれ、変数に代入されます。

お寄せいただきありがとうございます!

答えて

1

これを試してください。

function Add-Numbers { 
    param (
     [double] $FirstNumber, 
     [double] $SecondNumber 
    ) 

    Write-Host "Hello World" 

    return ($FirstNumber + $SecondNumber) 
} 

$result = Add-Numbers 1 2 

#Write-Host "Result is $result" 
+0

お礼ありがとうございます。一見すると、私はTee-Objectが私が望むものをやるとは思っていませんが、私はそれを使って遊んで、私が何をすることができるかを見ていきます。以前はそのコマンドレットについて聞いたことがありませんでした。 私が持っている問題は、機能が失敗しているわけではありません。再利用可能な機能の中で、進捗状況についてユーザーに情報を出力したいと思うかもしれません。私はそれを関数からの出力として外出せずに標準出力に出力する方法を理解できません。 –

+0

ところで、現在使用している方法が最後の提案です。私たちは 'Start-Transcript'を使ってすべてをファイルに置き、その後、そのファイルをスキャンする必要があります。私はstdoutを使用することがよりクリーンかもしれないと思った。 –

+0

私は私の答えを変えました。 stdoutに出力されるのは "Hello World"だけです。関数の結果は変数$ resultに格納されます。 –

2

関数の出力とstdoutは同じものなので、呼び出し元コードはstdoutストリームに出力されるものをすべて表示します。この場合、Write-Progressコマンドレットを使用して進捗状況をエンドユーザーに報告し、実際の関数出力のみを残すことをお勧めします。

関連する問題