2014-03-06 33 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将允许您在远程计算机上执行这些作业 - 由于您需要编写最少量的代码,所以它的功能非常强大且高效。