我正在尝试使用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需要几秒钟,但我不确定为什么工作没有等待。
思想?
答案 0 :(得分:0)
创建会话会导致很多延迟。您为什么选择使用-Session
而不是直接使用-ComputerName
?
我认为使用-ComputerName
方式运行Start-Job
会更有效率。无论哪种方式,由于您在远程计算机上调用作业,您的工作站将无法确定作业的进度。
如果您想跟踪作业的进度,则根本不应该使用Invoke-Command
。
答案 1 :(得分:0)
好吧我明白了......混淆的地方是:
1)我不知道我可以在没有Session的情况下发送代码块,并且会话实现很慢
2)我也不知道我发送invoke-command到几台计算机一次没有foreach。谢谢你的Ansgar Wiechers!