在应用程序中使用RunSpace 2
上一次的博客中我们介绍了最为基本的方法在应用程序中使用PowerShell引擎,当然这是最为简单的使用方式虽然简单当然也很有效,只不过不要忘记当不想再使用 RunspaceInvoke 实例的时候调用
实例的Dispose() 方法对其资源进行释放,也许你也已经尝试在你的应用程序中使用了这种方法
或许你也已经发现这中方法有一个巨大的问题 那就是通过简单的代码创建RunspaceInvoke 但是只能同步执行并且获取结果,也许这种方式在一般情况下并不是什么大问题,在需要长时间的执行的脚本或者命令时候 Invoke()方法将会阻塞当前线程,使得你不得不进行长时间的等待,不得不说这点的确有点让人不爽,我们之前说过选择的简单的办法就要丧失其灵活性。
聪明的你似乎觉得我们今天的主题应该是异步运行了? 我不得不Say No 因为在讨论异步运行之前还有很多事情要做。
So 你就应该知道我们今天讨论的主题是如何开始初步的使用Runspace 和PipeLine
一般来说 如果想在应用程序中使用PowerShell 引擎 我们只要创建Pipeline 就可以完成
但是现在我们还不能创建因为这是依靠Runspace 实例的CreatePipeline() 方法创建
而现在我们都没有创建Runspace 对象实例,Runspace 实例都要通过 RunspaceFactory 的静态方法来创建并且在PowerShellV1 版本时候创的Runspace 实例都是Local Runspace 意味这你讲不能创建基于远程计算机会话的 Runspace 当然 V1版本已经太过久远 我们已经无需思考这个问题
好了说了这么多 下面我们应该看实际代码
事实上代码简单到可以非常容易的理解
我们使用了无配置的静态方法创建了新的Runspace 对象 当然这是使用默认配置
紧接着 我们创建了管道,并且是一个完整的管道 因为我们给管道中放置了新的命令,
最后就像之前一样我们使用Invoke执行了管道中的命令,
请注意创建管道前 Runspace 状态要处于Opened 状态 虽然此时依然可以创建管道但是系统会引发异常
同样CreatePipeline 方法还有另外一个重载接受两个参数
意思是当true 时候 命令将会记录在命令历史记录中以方便使用Get-history 进行查找调用
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。