PowerShell中的流程vs实例vs Runspace

时间:2019-02-03 13:12:21

标签: .net powershell process instance runspace

[Powershell]::create()-方法在“当前或新运行空间”中创建一个新的PowerShell-“ Instance”。

有人可以解释一下过程实例运行空间和(也许是线程)这两个术语之间的关系其他方面。 用外行的话说吧?

2 个答案:

答案 0 :(得分:1)

您拥有的术语不能互换,并且不能做相同的事情。

进程是运行指令集的程序。

线程是程序中的一条指令。

多线程是指同时运行多条指令。每个都需要一个单独的线程。

Runspace在同一Powershell进程中,但是调用新的Powershell引擎以便在不干扰当前Powershell脚本线程的情况下运行其代码。

实例是一个包含的运行代码。它是一个描述符。

所以这是一些例子

我可以有一个流程实例。 我可以有一个线程实例。 我可以有一个Runspance的实例。

进行编辑以扩展基于评论的答案

“因此,在上面发布的示例ive中,[[Powershell] :: create())是线程,进程或运行空间的实例吗?”

因此,我们有一个Powershell应用程序。发生的情况是此应用程序启动了一个运行空间,在该空间中将执行您的命令,并设置一个位置来创建Powershell对象。每次打开Powershell控制台时,您都在启动另一个运行空间。

[Powershell]::create()创建一个对象,您可以在其中确定要运行的对象以及将在其上运行的运行空间。如果您不选择运行空间,那么它将为您创建一个运行空间。

所以[Powershell]是将运行什么?(脚本)和它将在哪里运行(运行空间)

运行空间是它将如何运行?(在Powershell引擎上)

答案 1 :(得分:1)

您可以将[Powershell] :: Create()视为单独线程上的新Powershell会话。该会话将创建一些默认运行空间,但是您可以将其更改为另一个运行空间。与Start-Process(单独的进程)和Start-Job(子进程)不同,[Powershell] :: Create()与您的主脚本在同一进程上运行,并与其共享内存空间。这意味着您可以在主会话和子会话之间交换实际的.net对象。如果会话在单独的进程上运行,则只能与文本/序列化数据交换。