命令间歇性地作为作业的作业打印状态运行

时间:2018-05-12 19:48:30

标签: powershell jobs invoke-command start-job

当我将某些命令(Invoke-CommandStart-Job)作为后台作业运行时,PowerShell有时会在启动作业时打印作业的状态。

例如(此处简化命令):

Invoke-Command -ComputerName $my_ip -FilePath "my_script.ps1" -ArgumentList $param_1 -AsJob

此命令将整个my_script.ps1文件打印到控制台以及开始状态,如:

State          : Running
PSComputerName : 192.168.50.50
RunspaceId     : 0c83a64d-318e-43c8-9bdb-68893eeb96c9
HasMoreData    : True
StatusMessage  :
Location       : localhost
Command        : <whole contents of my_script.ps1 printed here>
JobStateInfo   : Running
... <some more status info>

我正在运行大量脚本,出于某种原因,更改$param_1值会改变打印作业开始摘要(Format-Table - 类似输出)和上面显示的输出之间的打印行为。

我只能通过更改参数的声明位置来更改输出的打印方式(在上面的两个选项之间)。

这可能是PowerShell中的一个错误,但我不确定。当整个脚本文件在控制台上打印并且实际的调试打印变得难以发现时,这是令人愤怒的。

1 个答案:

答案 0 :(得分:0)

启动作业会返回对作业对象的引用,这是您在输出中看到的内容。要么丢弃它:

Inovke-Command ... -AsJob | Out-Null
[void](Invoke-Command ... -AsJob)

或将其捕获到变量中,以便稍后使用:

$job = Invoke-Command ... -AsJob