在后台作业中调用命令



我有一个powershell 2.0脚本,它应该在多台服务器上运行一个命令并处理输出。我想在后台作业中为每个服务器运行命令和处理。

命令工作没有任何问题,并在半秒内或更短时间内终止:

Invoke-Command -ComputerName $client -ScriptBlock { #do some stuff }

但当我在后台作业中运行时,作业不会终止:

Start-Job { Invoke-Command -ComputerName $client -ScriptBlock { #do some stuff } }

有人知道可能是什么问题吗?

看起来应该用另一种方式:

http://technet.microsoft.com/en-us/library/hh849698.aspx

要在远程计算机上运行后台作业,请使用AsJob参数在许多cmdlet上可用,或者使用Invoke-Command cmdlet在远程计算机上运行"启动作业"命令。关于更多信息,请参阅about_Remote_Jobs。

我更喜欢使用Start Job来运行invoke命令,这样我就可以使用Get Job监视和处理中央机器上的作业。

当我循环浏览"远程计算机列表"时,我使用"当前计算机名称"作为"开始作业"中的-name参数,这样我就可以单独或成组地观察每个作业。

只有我的两分钱经验。

编辑示例:

$job =
{ 
    $remoteJob = { ##Do Stuff Here }
    Invoke-Command -ComputerName $args[0] -ScriptBlock $remoteJob
}
Start-Job -Name <jobName> -ScriptBlock $job -ArgumentList <remoteComputer>

对于你关于为什么工作"永远不会结束"的问题,我没有其他输入,请确保你远程运行的代码确实结束了。

希望这能帮助

这也会起作用,至少在Powershell 5 中是这样

invoke-command -asjob -computer $PC -scriptblock { ## do stuff }

对于最新版本的PS,您可以创建一个新会话,并将其与Invoke-Command启动作业cmdlet一起使用,而不是直接使用ComputerName参数。

$s = new-pssession -computername Server01
invoke-command -session $s -scriptblock { start-job -scriptblock {get-eventlog system}}

相关内容

  • 没有找到相关文章

最新更新