【问题标题】:-s when using Start-Job in powershell-s 在 powershell 中使用 Start-Job 时
【发布时间】:2018-01-02 04:51:45
【问题描述】:

我正在尝试在 powershell 中调用 Start-Job。当我这样做时,它会生成一个带有以下参数的后台 powershell:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Version 5.0 -s -NoLogo -NoProfile -EncodedCommand [encoded command I want to run in base64]

但是,无论我发送什么命令,powershell 命令似乎都不会完成。

我尝试像这样生成一个 powershell 实例:

powershell.exe -s

这似乎也创建了一个看起来冻结的实例,没有执行或做任何事情。在网上看,我似乎找不到任何对 -s 参数的引用。

有人知道它的用途或如何摆脱它,以便我的开始工作正常工作吗?

编辑:-s 可能是 -sta 的简写,但我的命令不会使用 -sta 冻结,但使用 -s 会冻结。

Edit2:我后来发现 -s 是 -ServerMode 的简写,显然是旧版 Powershell 2.0 选项。我不知道为什么在使用 Start-Job 时会添加它。

Edit3:我使用的命令是:

$deploymentsJobs += Start-Job -InitializationScript { SomeSmallFunction } (AnotherFunction) -ArgumentList  $arg1, $arg2, $arg3}

【问题讨论】:

  • 我很感激,@Ghi102

标签: powershell command-line-interface start-job


【解决方案1】:

tl;博士:

  • -s 选项是命令行的预期部分,用于通过新的 PowerShell 进程启动后台作业 - 它将新进程置于 服务器模式,这是与后台作业管理的调用进程。

    • 不是一个遗留选项,但也没有记录,因为它只打算在内部由 PowerShell 使用。
  • 鉴于您所描述的一切都符合预期,问题可能出在您通过 -InitializationScript 和主脚本块(隐含的 -ScriptBlock 参数)运行的特定命令上。

    李>

正如您所发现的,Start-Job 调用会在幕后产生powershell -s -NoLogo -NoProfile 调用(可通过任务管理器发现)。
也就是说,会创建一个新的 PowerShell 进程来在后台运行命令。

仅当您使用 -Initialization 参数调用 Start-Process 时,才会出现带有 Base64 编码命令字符串的 -EncodedCommand 参数 - 主脚本块((隐含的)-ScriptBlock 参数)是 通过命令行传递(见下文)。

-s 在 PowerShell 内部 - 始终 - 用于调用后台作业,而您还发现,-s-servermode 开关的别名。 (鉴于仅记录了-STA,人们会认为-s-STA 的缩写,但事实并非如此)。
-s / -servermode 是一个实现细节,仅由 PowerShell 本身使用,这就是它没有记录的原因。

GitHub 上 PowerShell Core 源代码中的This location 向您展示了如何构造后台进程的命令行。

服务器模式是后台进程必须处于的模式,以便通过其标准流(stdin、stdout、stderr)与调用进程通信:即后台执行的命令通过其stdin流发送给后台进程,后台进程通过stdout和stderr流报告其输出。[1]

请注意,基于 XML 的序列化/反序列化发生在此进程间通信期间,使用与 PowerShell 相同的基础架构远程处理 - 请参阅this answer 了解更多信息。


[1] Ohad Schneider 指出,如果主脚本块包含诸如Start-Process -NoNewWindow 之类的命令,并且带有直接写入后台进程的标准输出流的控制台程序,则可能会意外中断此通信 -见this answer

【讨论】:

    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多