2009-06-09 24 views
2

基本上就是我想要做的是:調用多個PowerShell命令在同一範圍

步驟1)調用whatever.ps1(或腳本塊),劇本是這樣的: $你好=「世界「

步驟2)調用獲取變量-name你好

步驟3)檢索的輸出獲取變量

我無法弄清楚如何做到這一點乾淨,因爲我每次調用創建一個不同範圍的腳本塊。

回答

2

您有幾個選項。最簡單的方法是更改​​腳本,如果可以的話:

$global:hello = "world" 

但是使用全局變量通常是不好的做法。所以另一種方法是讓腳本輸出「Hello」,然後捕獲輸出的管道調用。只要改變你最初的腳本是:

"world" 

然後調用它,並抓住pipeline.Invoke的輸出()和抓鬥的第一個對象。

您還可以更改調用腳本的方式。將字符串傳遞給CreatePipeline,如下所示:

$hello = foo.ps1 

然後檢索變量$ hello的內容。

1

如果你仍然想要一個全局的(其他答案涵蓋了這個),你不需要使用主機應用程序中的Get-Variable

創建一個運行空間並執行該腳本。

然後,您可以從運行空間訪問變量:

value = myRunspace.SessionStateProxy.GetVariable("name"); 
+1

的限制是目前做遠程運行空間不myRunspace.SessionStateProxy.GetVariable工作,它拋出NewNotImplemented – ROAR 2010-02-25 08:13:56