2017-08-04 54 views
0

我試圖做一個自動化腳本,我根據不同的條件調用不同的命令(可執行文件,bats或cmdlet)。這些命令輸出多行日誌和進度。Powershell調用靜態方法內的表達式輸出

我想改善使用類的代碼可重用性。但是,我不能從類方法中調用這些命令的輸出。

例如,使用此代碼:

Class SomeClass 
{ 
    static [void] CallSomeExe() 
    { 
     & "Path\To\SomeExe.exe" args 
    } 
} 

`& "Path\To\SomeExe.exe" args` # Shows command output in shell 

`[Utils]::CallSomeExe()` # Doesn't show any output in shell 

如果我在直接(& "Path\To\SomeExe.exe" args)從該exe的輸出將被在所述殼中所示我的主要功能調用命令,但如果我調用靜態方法在主功能([Utils]::CallSomeExe())中將不會顯示輸出。

解決方案顯示日誌將捕獲調用結果($out = & "Path\To\SomeExe.exe" args)並將其返回到主函數。但是,一般來說,這是一個緩慢的過程,並顯示進度信息,我寧願將它進行流式處理,而不是在調用結束時等待所有輸出。

我很困惑,因爲它在一個函數內部工作,但不在類內部。

有沒有辦法讓它顯示輸出時,從靜態方法調用?

回答

0

當涉及到輸出時,類遵循更傳統的結構。您需要定義輸出類型並顯式返回。

Class SomeClass 
{ 
    static [string[]] CallSomeExe() 
    { 
     return & "Path\To\SomeExe.exe" args 
    } 
} 

原始腳本中的[void]表示它不返回輸出。

+0

我相信這是我提出的解決方案,並表示將爲我的問題做到這一點。因爲如果我調用編譯某些東西並編寫自定義輸出,警告或錯誤的命令,我希望能夠看到輸出。等待5或10分鐘,以查看完整的輸出,而不是針對我的情況的解決方案。 – ccarvalheiro