2014-03-06 30 views
1

我想知道是否可以從PowerShell控制檯主機或集成腳本編輯器(ISE)中獲取System.Management.Automation.PowerShell對象。我知道你可以通過調用$Host.Runspace訪問Runspace對象,但我需要直接訪問PowerShell對象(如果存在)。從ISE或控制檯主機獲取PowerShell .NET對象

唯一的選擇是創建一個新的PowerShell對象,然後調用其中的代碼,或者有沒有辦法使用$Host變量(或類似的)訪問預先創建的PowerShell對象?

http://msdn.microsoft.com/en-us/library/system.management.automation.powershell_members(v=vs.85).aspx

+0

我可以查詢您打算如何處理PowerShell實例嗎? – jpmc26

+0

我需要檢查它上面的'PSDataStreams'屬性。 –

回答

2

在此基礎上ScriptLogger blog post by Oisin使用PSDataStreams,我會說不。您需要創建一個PowerShell對象[powershell]::create()並使用生成的對象執行腳本。然後,當您點擊PSDataStreams集合時,它將包含執行腳本的各種輸出。

0

如果您的目標是異步執行,您可能需要Powershell作業。
如果您的目標是產生新的shell /線程並在其中執行代碼,然後從該執行中返回數據,請查看「start-job」和「invoke-command -asJob」。這些命令將生成一個runspace-你可以從他們返回的數據,如果你簡單地調用他們的腳本塊的最後一個變量,然後使用:

$Var = get-job|receive-job 

PowerShell的將出色地處理運行空間管理以最小的工作 - 如果你正在管理手動運行空間,你可能正在做一些艱難的工作。請注意,Invoke-command將允許您在遠程計算機上執行這些作業 - 由於您需要編寫最少量的代碼,所以它的功能非常強大且高效。