非终止远程作业执行 Return

Remote Job execution with non terminating Return

我有一个脚本,在不同的情况下,我在远程和本地都是 运行。在远程情况下,我想 return 一些额外的工作信息。但是,该脚本还需要通过重新启动、注销等来完成。

但是,如果我Return $Results,则不会执行后面的代码。而如果我 Write-Host return 信息,我将其视为作业的附加数据,并且后面的脚本完成代码仍然可以执行。

我可以完成这项工作,但会导致两个问题。

  1. 我有两位数据需要 return,我原计划在一个数组中这样做。但是对于 Write-Host 我需要使用 $value1|$value2 的组合,然后在 | 上拆分字符串获取两位数据。
  2. Write-Host 有点污染我的控制台,所以我需要一些额外的代码来管理它。

有什么方法可以return中间信息并继续执行吗?还是我别无选择,只能走 Write-Host 路线?或者是否有另一种方法比 Write-Host hack 更好?

不要使用 Return。只需输出 $Results,让脚本的其余部分继续。

您的印象似乎是必须使用 return 关键字来创建函数(?) return。不过,PowerShell 的工作方式略有不同。 PowerShell 函数 return 成功输出流上的整个非捕获输出。 return 关键字仅用于在该特定点创建函数 return。

完全没有区别
function Foo {
  return 'something'   # return with value
}

function Foo {
  'something'
  return               # echo first, then return
}

function Foo {
  'something'          # just echo, return implicitly
}

这样你就可以让一个函数生成输出,然后在实际 returning:

之前做更多的事情
function Foo {
  'foo'
  'bar'
  Get-ChildItem . -Recurse | Out-Null  # output not returned (suppressed)
  'baz' > 'C:\some.txt'                # output not returned (redirected to file)
}

不过,只有在函数调用 return 之后,调用方才会收到 returned 值(在本例中为 'foo', 'bar')。如果您需要即时反馈,您将需要其他方式。