在-NoExit不工作的情况下启动PowerShell

在-NoExit不工作的情况下启动PowerShell,powershell,Powershell,需要在PowerShell中启动多个作业,但它们应位于不同的会话中。因此,要启动一个,可以使用: Start-Process powershell -ArgumentList "-command &{Get-Process}","-noexit","-noprofile" 但新窗口将在命令完成后立即关闭。即使我使用的是-NoExit参数。根据和,这应该有效。甚至尝试通过等待用户输入来阻止窗口,但它只是关闭。虽然命令参数已命名,但位置仍然至关重要(请参阅PowerShell.exe/?)

需要在PowerShell中启动多个作业,但它们应位于不同的会话中。因此,要启动一个,可以使用:

Start-Process powershell -ArgumentList "-command &{Get-Process}","-noexit","-noprofile"

但新窗口将在命令完成后立即关闭。即使我使用的是
-NoExit
参数。根据和,这应该有效。甚至尝试通过等待用户输入来阻止窗口,但它只是关闭。

虽然命令参数已命名,但位置仍然至关重要(请参阅PowerShell.exe/?):


我不知道。认为命名参数排除了将参数放置在特定位置的必要性。@Syphirint在powershell中(几乎总是)是正确的(值得注意的例外是在使用时),并且通常在命令行上也是如此,但是.exe可以以任何方式定义其参数。在这种情况下,
-command
需要放在末尾,原因类似:附加参数是否是命令的一部分是不明确的。实际上,它只需要-command放在最后,因为它的内容最模糊。避免担心“命令的结尾在哪里?”的最简单方法是将其放在最后,并读取到输入的末尾。加上1表示必须将
-command
/
-c
及其参数放在最后的信息,但有两个补充:将参数作为数组传递给
-ArgumentList
在概念上是最好的方法,不幸的是,由于
启动过程中存在一个长期存在的bug,这是不明智的,在撰写本文(v7.1)时仍然存在该bug-请参阅。目前,使用一个包含所有参数的字符串(根据需要包含在嵌入式
“…”
引用中)是唯一可靠的方法。正如链接的GitHub问题中所讨论的,将来可能会引入一个
-ArgumentArray
参数,该参数支持健壮的基于数组的参数传递。
Start-Process powershell -ArgumentList "-noexit", "-noprofile", "-command &{Get-Process}"