簡體   English   中英

如何開發當前PowerShell腳本的輸出流?

[英]How to tee the output streams of the current PowerShell script?

我有一個PowerShell腳本輸出到stdout和stderr。 我想同時將這些文件發送給幾個日志文件。

最好的方法是什么?

我考慮過幾件事情:

  • 使用執行tee的功能包裝寫入錯誤和寫入輸出。
    • 我不喜歡這么多,因為(a)我失去了將一個值放在一條線上並讓它自動輸出的簡單能力。(b)我必須包裹我正在調用的每個地方,包括原生exe,可能有輸出並包裝那些。
  • 包裹在發球台的外部腳本中。
    • 這有點好一些,但現在我需要從外部腳本中的內部腳本復制param()塊。 我可以完全移動param()塊,但我也想調用內部腳本有時用於測試目的(即沒有得到發球台)。 我想我可以在外部腳本中使其成為可選行為..

我記得當我以前寫一些perl時,有一種方便的方法可以通過鈎子全局重定向所有stdout / err輸出。 PowerShell可以這樣嗎?

哎呦。 我應該花幾分鍾時間跟谷歌一起玩。

Start-Transcript就是這樣做的!

http://technet.microsoft.com/en-us/library/dd347721.aspx

雖然它不捕獲exe的輸出,但只有PowerShell。 這是一個很好的解決方法:

https://web.archive.org/web/20111106093956/blog.magenic.com/blogs/daniels/archive/2008/07/14/Output-Issue-with-Transcript-in-Powershell.aspx

另一個更新:我發現Start-Transcript使用主機窗口緩沖區寬度,這在系統帳戶上運行計划任務時太窄了。 這是如何解決這個問題。 在腳本的頂部添加這樣的內容:

try
{
    $host.ui.rawui.buffersize = `
        new-object system.management.automation.host.size `
            200, $host.ui.rawui.buffersize.height
}
catch {}

將200更改為您想要的成績單寬度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM