3

Powershell が次のスニペットで「tee'd」変数を表示しない奇妙な理由を誰かが知っていますか?

# a.txt contains any text 
cat a.txt | tee -variable foovar | % { 'value of foovar: ' + $foovar } 

実際には、1 行だけでテキストを検索し、結果に基づいてテキストを処理します。たとえば、メールを送信します。

get-content [somefile] | select-string [somePattern] | tee [var] | ..[more processing] | .\sendmail.ps1 [var] 
4

3 に答える 3

2

渡されたすべての出力Tee-Objectは変数で使用できる必要があるため、コマンドレットはその入力をキャッシュし、最後に変数に書き込みます。

ただし、次のこともできます。

$var = gc a.txt
$var | your_processing_stuff
于 2010-02-25T22:48:23.080 に答える
1

あなたも使うかもしれませ-OutVariable

cat c:\dev\NamingConventions.txt -OutVariable test1 | % { write-host 'value: ' $_ }
$test1
cat c:\dev\NamingConventions.txt | select-string -patt panel -OutVariable test2
$test2
于 2010-02-26T08:06:21.397 に答える
0

スクリプトで tee が機能しているように見えますが、期待どおりではありません。実際、配列全体を $foovar に送信しますが、次の行まで使用できません。それがティーの性質のようです。スクリプトを 2 回続けて実行すると、このように機能することがわかります。2 回目の実行では、$foovar に a.txt の内容全体が含まれています。

配列全体ではなく、ファイルの各行を foovar に設定したいようです(私が間違っていない限り)。その場合は、すべてを foreach ループに送信するときに、とにかく特別な $_ var に設定します...つまり

cat a.txt |%{'value of line: ' $_}

上記はselect-stringでも機能します。

于 2010-02-26T14:51:29.290 に答える