如何在不同的运行空间中运行函数,PowerShell

Tom*_*Tom 3 powershell powershell-2.0

我有向事件添加注册的 powershell 脚本,但是当事件跳转时,每次事件跳转时我都会收到以下错误:“没有可用于在此线程中运行脚本的运行空间”我正在使用 PS v2,什么可以我愿意?你能提供一些代码吗?谢谢

Jay*_*kul 5

您是否使用第三方 PowerShell 主机?这是一个错误;)

如果您搞乱了异步回调,问题是您正在不同的线程中运行,并且[Runspace]::DefaultRunspace线程是静态的。@x0n 不久前为异步回调写了一个桥(我会看看是否能找到它)。

最重要的是,您需要执行错误建议的操作:在 System.Management.Automation.Runspaces.Runspace 类型的 DefaultRunspace 属性中提供一个。但是您必须从要执行代码的线程中执行此操作,因此异步回调有点粗糙。

[Management.Automation.Runspaces.Runspace]::DefaultRunspace = [RunspaceFactory]::CreateRunspace()
Run Code Online (Sandbox Code Playgroud)


x0n*_*x0n 5

听起来您正在尝试在非 powershell 线程上运行脚本,可能是通过异步回调。这不是受支持的方案。诀窍是“桥接”回调到事件基础设施,其中脚本块拥有默认运行空间。看看我在这里写的:

https://web.archive.org/web/20190222052659/http://www.nivot.org/blog/post/2009/10/09/PowerShell20AsynchronousCallbacksFromNET

它向您展示了如何在 powershell 中使用异步线程并运行脚本以响应回调。

-Oisin