gpt4 book ai didi

powershell - -s 在 powershell 中使用 Start-Job 时

转载 作者:行者123 更新时间:2023-12-01 13:32:13 28 4
gpt4 key购买 nike

我正在尝试在 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 的简写,显然是 Legacy Powershell 2.0 选项。我不知道为什么在使用 Start-Job 时添加了它。

Edit3:我使用的命令是:
$deploymentsJobs += Start-Job -InitializationScript { SomeSmallFunction } (AnotherFunction) -ArgumentList  $arg1, $arg2, $arg3}

最佳答案

tl;博士:

  • -s option 是命令行的预期部分,用于通过新的 PowerShell 进程启动后台作业 - 它将新进程置于服务器模式,这是与后台作业管理的调用进程通信所必需的。
  • 它不是遗留选项,但也没有记录,因为它仅供 PowerShell 在内部使用。
  • 鉴于您描述的一切都符合预期,问题可能出在您通过 -InitializationScript 运行的特定命令上。并在主脚本块中(隐含的 -ScriptBlock 参数)。


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

    -EncodedCommand仅当您调用 Start-Process 时才存在带有 Base64 编码命令字符串的参数与 -Initialization参数 - 主脚本块((隐含的) -ScriptBlock 参数)不通过命令行传递(见下文)。
    -s用于 PowerShell 内部 - 始终 - 调用后台作业,以及 -s正如您还发现的,是 -servermode 的别名转变。 (鉴于只有 -STA 被记录在案,人们会认为 -s-STA 的缩写,但事实并非如此)。 -s/ -servermode是一个实现细节,仅由 PowerShell 本身使用,这就是它没有记录的原因。

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

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

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

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

    关于powershell - -s 在 powershell 中使用 Start-Job 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45334176/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com