我想知道是否可以从PowerShell控制台主机或Integrated Scripting Editor(ISE)中获取System.Management.Automation.PowerShell
对象。我知道您可以通过调用Runspace
来访问$Host.Runspace
对象,但我需要直接访问PowerShell
对象(如果存在)。
唯一的选择是创建一个新的PowerShell
对象,然后调用其中的代码,还是有办法使用{{1}访问预先创建的PowerShell
对象变量(或类似的)?
答案 0 :(得分:2)
基于使用PSDataStreams的ScriptLogger blog post by Oisin,我会说不。您需要创建PowerShell对象[powershell]::create()
并使用生成的对象执行脚本。然后,当您点击PSDataStreams集合时,它将包含执行脚本的各种输出。
答案 1 :(得分:0)
如果您的目标是异步执行,您可能需要Powershell作业 如果您的目标是生成新的shell /线程并在其中执行代码,然后从该执行返回数据,请查看“start-job”和“invoke-command -asJob”。这些命令将生成一个运行空间 - 如果只是在脚本块的末尾调用一个变量,则可以从它们返回数据,然后使用:
$Var = get-job|receive-job
Powershell将以最少的工作精确地处理运行空间管理 - 如果您手动管理运行空间,那么您可能正在采取艰难的方式。请注意,Invoke-command将允许您在远程计算机上执行这些作业 - 非常强大和高效,因为您需要编写最少量的代码来执行此操作。