基本上,我正在尝试从计算机列表中运行powershell命令。
我可以在每台机器上调用该命令,但是我必须等待每台机器完成安装才能继续进行下一个安装。当我尝试为每台机器创建作业时,什么也没发生,我怀疑是因为我的脚本在将命令发送到下一台机器时已与该机器会话断开连接。
#Start/Var
$creds = Get-Credential
$computers = Get-Content -Path .\computers.txt
$job = start-job -scriptblock { choco install c:\packages.config -y }
foreach($server in $computers) {
CP .\packages.config \\$server\C$
Invoke-Command -ComputerName $server -ScriptBlock {$job} -Credential $creds
}
答案 0 :(得分:2)
如BenH在评论中所述,您可以让Invoke-Command
并行执行操作。速度变慢是,您将不得不等待文件在每台计算机上的复制,但是您可以同时在所有计算机上执行安装。
#Start/Var
$creds = Get-Credential
$computers = Get-Content -Path .\computers.txt
#Copy files to servers one at a time
foreach($server in $computers) {
CP .\packages.config \\$server\C$
}
#Install the package on all servers in parallel
Invoke-Command -ComputerName $computers -ScriptBlock {choco install c:\packages.config -y} -Credential $creds