powershell - 在作业被触发后执行其他 cmdlet

标签 powershell windows-terminal

假设我有一个简单的工作,如下所示:

$job = Start-Job -ArgumentList 1, 2 -ScriptBlock {
        $var1 = $args[0]
        $var2 = $args[1]

        $var3 = $var1 + $var2

        Write-Host $var3
}

现在假设我想继续执行 $job session 并引入新参数,然后继续在 $job 内执行。

据我了解,这不是乔布斯在 Powershell 中的工作方式。一旦作业内部的命令被执行,作业就被认为已经完成,并且不能再被回收。如果我的理解是正确的,是否有其他方法可以实现在 powershell session 中有效地执行后台任务的效果,您可以继续注入(inject)新的命令/变量,而无需创建新的作业/ session /进程?为了清楚起见,这是本地的(在同一台机器上)。

最佳答案

Dennis' helpful answer提供关键指针:使用 PowerShell SDK创建可用于重复调用命令的进程内 PowerShell 实例。

以下示例代码演示了这一点:它不断提示您执行命令并使用单个可重用的 PowerShell实例来执行它(按 Ctrl-C 退出):

$ps = [powershell]::Create()

while ($true) {
  $cmd = Read-Host 'Type a command to execute'
  # Execute and output the results.
  $ps.AddScript($cmd).Invoke()
  # Relay errors, if any.
  $ps.Streams.Error | Write-Error
  # Reset in preparation for the next command.
  $ps.Commands.Clear(); $ps.Streams.ClearStreams()
}

关于powershell - 在作业被触发后执行其他 cmdlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68944342/

相关文章:

Powershell 不识别 bool 参数

powershell - 查找并替换同时包含双引号和方括号的字符串

windows-terminal - 任何人都知道如何像这样美化 Windows 终端

windows-terminal - 如何通过在 Powershell(Windows 终端)中运行特定命令来打开新选项卡?

powershell - 使用 Powershell 4.0 更新计划任务操作参数

powershell - 从模块内部访问 PowerShell 脚本参数

类似于 Powershell 的运算符不可交换

powershell - 在按下 ENTER 之前获取 powershell 当前行

powershell - 如何在新的 Windows 终端中使用 Google Cloud Shell

docker - 无法使用新的 Windows 终端在 WSL2 中启动 Docker