我有一個PowerShell(2.0)腳本調用另一個。我不僅希望收到主要的輸出,而且要另外收到我可以單獨使用的對象,例如在消息中顯示彙總行。使用參數(「By Reference」參數)從PowerShell返回對象?
讓我們Test2.ps1爲被調用的腳本:
param([String]$SummaryLine)
$Issues = "Potentially long list of issues"
$SummaryLine = "37 issues found"
$Issues
而且Test1.ps1因爲調用它的腳本:
$MainOutput = & ".\Test2.ps1" -SummaryLine $SummaryOutput
$MainOutput
$SummaryOutput
輸出很簡單:
Potentially long list of issues
雖然參數$ SummaryLine由Test2填充,但$ SummaryOutput在Test1中保持未定義。
在調用Test2之前定義$ SummaryOutput並沒有幫助;它只是保留調用Test2之前分配的值。
我試着設置$ SummaryOutput和$ SummaryLine作爲[ref]變量(正如你可以用函數做的那樣),但是在調用Test2之後$ SummaryOutput.Value屬性是$ null。
是否有可能在PowerShell中返回參數中的值?如果沒有,解決方法是什麼?在Test2中直接分配一個父範圍變量?
聖牛,[ref]確實有用!當我嘗試這樣做時,我在被調用的腳本中分配了$ OptionalOutput而不是$ OptionalOutput.Value,所以$ x在調用腳本中沒有更新。那麼你的第二種方法是怎麼回事?如果$ x是一個PSObject,它會自動作爲[ref]傳遞? – 2011-03-03 19:38:04
我會建議使用[ref]而不是第二個選項。在PowerShell(如.NET)中,對象按引用傳遞,但變量是作用域的。起初可能很難理解,但這是事實。 – JasonMArcher 2011-03-03 19:58:59
@JasonMArcher:是的,我喜歡[ref]更明確。回覆。傳遞對象,如果所有的對象都是通過引用傳遞的,爲什麼不能用於String(這是一個.NET Reference Type對象)? – 2011-03-03 20:25:52