2016-11-14 99 views
1

我創建了一個基本上收集信息並通過Start-Job將該信息發送到外部PS腳本的PowerShell界面。我有一個計時器,每秒都會觸發接收作業,並使用我創建的作業中的STDOUT更新輸出框。記錄Powershell作業結果

外部PS腳本:

此腳本具有許多功能(其利用許多小命令),並且將打印通過寫詳盡以一個日誌消息。問題是,有時在這些函數中我會打印消息和/或返回一個值。我們都知道,函數返回的任何東西都放在標準輸出中。因此,只要函數返回一個值,該值就會打印到輸出Rich Textbox控件中。我不想那樣。另外,如果我使用的詳細,並沒有被打印在控制(不過,它被打印到控制檯)

我想什麼消息:唯一 打印郵件到我的富文本框和我的日誌文件,在流中沒有函數返回值(除非它們是消息本身的一部分)。

注意:我重寫從VB.NET應用程序這個應用程序,以一個PowerShell工作室應用......我注意到以前這被正在通過流STD輸出到文本框中完成,採用了類似外部PowerShell腳本 - 除了腳本使用WRITE-HOST。這對我來說沒有意義,因爲寫主機甚至不應該放入流中。

另類視角

我不得不讓工作添加到日誌本身,然後具有UI運行獲取內容-tail 1 ...這會工作的工作示例,除了一些我的信息將被印在不止一行上,並且不會按預期拉動所有內容。如果有人有辦法讓我在任何時候都能在日誌中獲得任意數量的新行,請告訴我。這可能比我目前的方法更容易。

回答

0

所以基本上你想使用PowerShell向後?函數只應返回實際輸出流中所需的值,如果想要提供有關該命令正在執行的操作的信息,則應將任何不應將值返回到流中的變量或發送到Out-Nullwrite-verbose的用途。 Write-Verbose按預期工作,就像寫主機一樣,它不會被放入流中。

要回答你的問題,你應該做的是重寫你的函數,以便它們返回一個值(或者根本沒有值),對於不能被重寫的函數,你可以通過腳本禁止它們的輸出或者將它們分配給一個變量(如果它們必須稍後使用),或者將它們分配給Out-Null。當前需要成爲輸出一部分的詳細流中捕獲的任何內容也應該移動到標準流中,並使用Write-Output編寫,如果您只希望某些運行中的數據包含If語句,但是如果你真的想要將詳細流與標準流結合起來,你可以在這裏查看信息 - Redirect two or more Powershell streams other than output stream to the same file

+0

Out-Null或將函數結果賦值給變量做我現在需要的東西。謝謝。當我需要一個值在流中的時候,我試圖去適應這種情況,但是我想我可以用這種方式來處理它。 – Zephyrus1898

+0

聽起來不錯,一般來說你希望你的函數是非常原子的,所以只需要返回你真正想要成爲輸出流的一部分的值,在你想要的詳細警告或錯誤流中你想要的任何東西。 –