具有非终止返回的远程作业执行

时间:2015-05-19 22:31:17

标签: powershell return powershell-remoting

我有一个脚本,我在不同情况下远程和本地运行。在远程情况下,我想返回一些额外的工作信息。但是,该脚本还需要使用Restart,LogOff等完成。

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

我可以做到这一点,但它会导致两个问题。

  1. 我需要返回两位数据,我计划在数组中执行此操作。但是对于Write-Host,我需要使用$value1|$value2的kludge,然后将字符串拆分为|得到两位数据。
  2. Write-Host对我的控制台有些污染,所以我需要一些额外的代码来管理它。
  3. 有没有办法返回中间信息并继续执行?或者我除了走Write-Host路线别无选择?或者是否有另一种方法比Write-Host hack更好?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您似乎认为必须使用return关键字来创建函数(?)才能返回一些内容。不过,PowerShell的工作方式略有不同。 PowerShell函数返回成功输出流上的整个非捕获输出。 return关键字仅用于在该特定点返回函数。

之间没有任何区别
function Foo {
  return 'something'   # return with value
}

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

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

这样你可以让函数生成输出,然后在实际返回之前做更多的事情:

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

但是,只有在函数调用返回后,调用者才会收到返回的值(在本例中为'foo', 'bar')。如果您需要立即反馈,您还需要其他方法。