我編寫了幾個爲客戶端部署軟件的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)並將其分配給該變量。
感謝您的任何建議,你可以給!
感謝您的建議。乍一看,我不認爲Tee-Object會做我想做的事,但我會玩弄它,看看我能做些什麼。我以前從來沒有聽說過這個cmdlet。 雖然我的問題不是函數失敗。這就是說,在整個可重用功能的過程中,我可能希望向用戶輸出有關進度的信息。我無法弄清楚如何將它輸出到標準輸出,而不會將它作爲函數的輸出輸出。 – 2011-12-17 17:01:05
順便說一下,他們正在使用的當前方法是您最後的建議。我們使用「Start-Transcript」將所有內容放到一個文件中,然後他們必須掃描該文件。我認爲使用stdout可能會更清潔。 – 2011-12-17 17:02:20
我改變了我的答案。輸出到stdout的唯一東西是「Hello World」,函數的結果存儲在變量$ result中。 – 2011-12-17 17:16:13