2011-12-17 57 views
1

我編寫了幾個爲客戶端部署軟件的Powershell腳本。我使用Write-Host輸出大量信息,以便可以監視部署的進度,並且他們使用Start-Transcript從其中一個部署應用程序調用此項來捕獲此輸出。將輸出定向到標準輸出中,而不會出現調用代碼

但是,他們還需要能夠從另一個只能從stdout捕獲輸出的應用程序調用其中一些腳本。這意味着寫主機將不會在那裏工作,因爲它只輸出到控制檯或主機,並沒有指向標準輸出(正確?)

我的想法是,我可以改變代碼使用Write-Out,除了這會導致另一個問題。由於我使用的功能,因爲功能在Powershell「返回」所有 stdout調用程序,可能會搞砸了我的任何代碼檢索功能的輸出。

有沒有辦法將輸出從函數直接輸出到標準輸出,而不會將調用代碼作爲函數本身的輸出?這是問題的一個例子:

function Test-Output ([int]$number) { 
    Write-Output "This is a string" 
    return $number 
} 

[int]$someNumber = Test-Output 10 

$someNumber 

如果你運行上面的代碼中,你會看到一個錯誤,因爲PowerShell是嘗試指派「這是一個字符串」到整數$someNumber。如果將變量更改爲string,則它將捕獲該函數的全部輸出(這是一個字符串10)並將其分配給該變量。

感謝您的任何建議,你可以給!

回答

1

試試這個。

function Add-Numbers { 
    param (
     [double] $FirstNumber, 
     [double] $SecondNumber 
    ) 

    Write-Host "Hello World" 

    return ($FirstNumber + $SecondNumber) 
} 

$result = Add-Numbers 1 2 

#Write-Host "Result is $result" 
+0

感謝您的建議。乍一看,我不認爲Tee-Object會做我想做的事,但我會玩弄它,看看我能做些什麼。我以前從來沒有聽說過這個cmdlet。 雖然我的問題不是函數失敗。這就是說,在整個可重用功能的過程中,我可能希望向用戶輸出有關進度的信息。我無法弄清楚如何將它輸出到標準輸出,而不會將它作爲函數的輸出輸出。 – 2011-12-17 17:01:05

+0

順便說一下,他們正在使用的當前方法是您最後的建議。我們使用「Start-Transcript」將所有內容放到一個文件中,然後他們必須掃描該文件。我認爲使用stdout可能會更清潔。 – 2011-12-17 17:02:20

+0

我改變了我的答案。輸出到stdout的唯一東西是「Hello World」,函數的結果存儲在變量$ result中。 – 2011-12-17 17:16:13

2

函數輸出和標準輸出是相同的東西,所以調用代碼將看到任何輸出到標準輸出流。在這種情況下,我會建議使用Write-Progress cmdlet向最終用戶報告進度,並保留單獨的實際功能輸出。

相關問題