PowerShell远程会话和启动 - 作业问题

时间:2017-09-06 12:58:00

标签: powershell session jobs start-job

我正在尝试使用job运行以下脚本,但块中的代码仅执行第一个命令并退出。作业显示在我的电脑上

$computers = get-adcomputer -filter * | where { ($_.DNSHostName -match 'server')} 

foreach ($computer in $computers) {
        $session = New-PSSession -ComputerName $computer.DNSHostName
        Invoke-Command -Session $session -ScriptBlock {
            Stop-Service  W3SVC -Force
            Remove-Item "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root" -Force -Recurse
            Start-Service  W3SVC     
        } -asjob -jobname IIS_Maintenance
        Remove-PSSession -Session $session
}

如果我评论-asjob -jobname IIS_Maintenance作业运行正常,但它是同步的。停止IIS需要几秒钟,但我不确定为什么工作没有等待。

思想?

2 个答案:

答案 0 :(得分:0)

创建会话会导致很多延迟。您为什么选择使用-Session而不是直接使用-ComputerName

我认为使用-ComputerName方式运行Start-Job会更有效率。无论哪种方式,由于您在远程计算机上调用作业,您的工作站将无法确定作业的进度。

如果您想跟踪作业的进度,则根本不应该使用Invoke-Command

答案 1 :(得分:0)

好吧我明白了......混淆的地方是:

1)我不知道我可以在没有Session的情况下发送代码块,并且会话实现很慢

2)我也不知道我发送invoke-command到几台计算机一次没有foreach。谢谢你的Ansgar Wiechers!