PowerShellとTee


9

このコマンドを使用して、コンソールとファイルの両方に出力を表示します。

powershell -command "my_command_1 | tee ('logs\{0}.log' -f (Get-Date -format 'yyyy.MM.dd-HH.mm'))"  
powershell -command "my_command_2 | tee ('logs\{0}.log' -f (Get-Date -format 'yyyy.MM.dd-HH.mm'))"
# etc

それは私が期待したほどうまく機能せず、いくつかの質問があります:

  1. stderrをファイルにリダイレクトするにはどうすればよいですか?
  2. 出力は非常に奇妙に機能します。一部のコマンドでは、テキストが出力されてからコンソール/ファイルが更新されるまでに大きな遅延があります。他のいくつかのコマンドでは、テキストが印刷されるときに出力が更新されたように見えます(私はT字なしでコマンドを実行し、何を印刷する必要があるかを知っています)。この遅延により、このTシャツはほとんど役に立たなくなります。重大なエラーが出力されるため、コマンドを停止する必要がありますが、手遅れになるまで何も表示されません。

    コマンドによっては、完全なコマンドが実行された後にのみ出力が出力されます。

  3. さらに、コマンドがユーザー入力を要求しても、コンソール/ファイルの出力は空です!そのコマンドについて私はそれが期待するものを知っていて、必要なテキストを盲目的に印刷してそれが機能しましたが、他の人のために-コマンドが入力を待つ間、私は何かが無限に起こるのを待ちます!

これらの問題の解決策はありますか?そうでない場合、PowerShellのこのT型のものはまったく役に立ちません。


何千ものスクリプトで使用されているツールは、特定の要件を満たしていない可能性があるという理由だけで「完全に役に立たない」とは思いもしません。
スティーブンジェニングス

そうです、この特定のケースでは役に立たないということです:)私はTシャツを放っておくほうがいいです。
race1

回答:


7
  1. My-Command 2>&1 | Tee-Object 'myfile.log'。を参照してくださいGet-Help about_Redirection
  2. Ctrl+に依存するのではなく、エラーをトラップする必要がありますC。を参照してくださいGet-Help about_Try_Catch_Finally。コマンドは、外部プログラムまたはスクリプトを実行していますか?
  3. 私が理解しているように、通常、文字列オブジェクトは、行末文字に達するまでパイプを介して送信されません。その理由は非常に単純です。これを行わなかった場合、部分的な(読み取り:不完全な)文字列がパイプを通過します。 Tee部分的な文字列は問題なく処理できるかもしれませんが、他のコマンドレットはそうであるForEach-Objectか、Select-Objectそうではありません。この動作をある程度無効にGet-Contentする特別なスイッチが-ReadCountありSelect-Object -Skip/-First/-Last/-Unique、パイプのさらに下のコマンドで深刻に混乱することに注意してください。

実行している外部プログラムが、PowerShellが期待する規則に従っていない可能性があります。Teeたとえば、は適切にと呼ばれますTee-Object。これにより、操作に適した種類の情報がわかります。その場合は、コンテンツをすぐに転送するように設計されたGNU Win32 UtilsまたはMSYStee.exeからさらに進んでいる可能性があります。


1.ありがとうございます。2.正解、私はいくつかの重大な予期せぬ状況を意味しました。3.不完全な文字列が有罪である理由を理解できません:)結局、私のコマンドはPythonスクリプトを実行します-それはファブリックコマンドです。Windows用にコンパイルされたlinux utilsからtee.exeを使用しようとしましたが、同じ結果で、場合によっては出力がありません。それは、私の具体的な構成と具体的なスクリプトがTユーティリティーでまったく機能しないことを意味しますか?ありがとうございました。
race1

Pythonスクリプトが正しく動作しないように思えます。
ベーコンビット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.