PowerShell远程会话和启动作业问题
我试图用job运行以下脚本,但块中的代码只执行第一个命令并退出。作业在我的计算机上显示为“已完成”PowerShell远程会话和启动作业问题,powershell,session,jobs,start-job,Powershell,Session,Jobs,Start Job,我试图用job运行以下脚本,但块中的代码只执行第一个命令并退出。作业在我的计算机上显示为“已完成” $computers = get-adcomputer -filter * | where { ($_.DNSHostName -match 'server')} foreach ($computer in $computers) { $session = New-PSSession -ComputerName $computer.DNSHostName Inv
$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\u维护
作业运行良好,但它是同步的。它需要几秒钟来停止IIS,但我不知道为什么作业没有等待
想法?创建会话会导致大量延迟。为什么选择使用
-Session
而不是直接使用-ComputerName
我认为使用-ComputerName
方式运行启动作业
会更有效。无论哪种方式,由于您正在远程机器上调用作业,因此您的工作站将无法了解作业的进度
如果要跟踪作业的进度,则根本不应使用
Invoke命令。创建会话会导致大量延迟。为什么选择使用-Session
而不是直接使用-ComputerName
我认为使用-ComputerName
方式运行启动作业
会更有效。无论哪种方式,由于您正在远程机器上调用作业,因此您的工作站将无法了解作业的进度
如果要跟踪作业的进度,根本不应该使用Invoke命令。好的,我想出来了。。。令人困惑的是:
1) 我不知道我可以在没有会话的情况下发送代码块,是的,会话实现很慢
2) 我也不知道我发送invoke命令给几台计算机都是一次没有foreach的。谢谢你,Ansgar Wiechers 好吧,我知道了。。。令人困惑的是:
1) 我不知道我可以在没有会话的情况下发送代码块,是的,会话实现很慢
2) 我也不知道我发送invoke命令给几台计算机都是一次没有foreach的。谢谢你,Ansgar Wiechers Invoke命令-Computer$computers-ScriptBlock{…}-AsJob-JobName IIS_维护
?您只是想异步执行此操作吗?argghhh我刚刚注意到我输入了错误的代码,我开始尝试找出问题所在。。。正确的代码是:$session=New PSSession-ComputerName$computer.DNSHostName Invoke命令-session$session-ScriptBlock。。。。没有起始工作线。是的,我正在尝试以异步方式执行此操作,以便有X个并行作业。您可以使用更新的代码编辑原始帖子,而不是将代码以难以阅读的格式放入注释中。谢谢Jason,代码现在已编辑。Invoke命令-Computer$computers-ScriptBlock{…}-AsJob-JobName IIS_Maintenance
?您只是想异步执行此操作吗?argghhh我刚注意到我输入了错误的代码,我开始尝试找出问题所在。。。正确的代码是:$session=New PSSession-ComputerName$computer.DNSHostName Invoke命令-session$session-ScriptBlock。。。。没有起始工作线。是的,我正在尝试以异步方式执行此操作,这样我可以有X个并行作业。您可以使用更新的代码编辑原始帖子,而不是将代码以难以阅读的格式放入注释中。谢谢Jason,代码现在已被编辑。使用会话的原因是我需要执行多个命令,因此打开会话、执行多个命令然后关闭会话似乎更有效。同样来自“在一个月的午餐中学习Powershell”一书:PS C:\>start job-scriptblock{invoke command-command{dir}➥-computername SERVER-R2}完全冗余;保留Invoke Command部分并使用-AsJob参数使其在后台运行。使用会话的原因是我需要执行多个命令,这样打开会话、执行多个命令然后关闭会话似乎更有效。同样来自“在一个月的午餐中学习Powershell”一书:PS C:\>start job-scriptblock{invoke command-command{dir}➥-computername SERVER-R2}完全冗余;保留Invoke命令部分并使用-AsJob参数使其在后台运行。