2014-01-28 222 views
-1

如何在多台计算机上并行运行PowerShell脚本?并行运行powershell命令

$TempFolder = "C:\DOWNLOADED_APPLICATIONS" 
      if(!(test-path $TempFolder)) 
      {New-Item -path $TempFolder -type directory} 

    Write-Host "" 
    Write-Host "Downloading .NET framework v4.0 installation package" -ForegroundColor Yellow; 
      $src = "\\onesoul\tools\DOTNET45\dotNetFx45_Full_x86_x64.exe" 
      $dest = "$TempFolder" + "\" + "dotNetFx45_Full_x86_x64.exe" 
      $wc = New-Object System.Net.WebClient 
      $wc.DownloadFile($src, $dest) 
      $args = " /q /norestart" 
     Write-Host "Installing .NET framework v4.0" -ForegroundColor Yellow; 
     Start-Process -FilePath $dest -ArgumentList $args -Wait 
     Write-Output "Dot net 4.5 installed" 

如果我一次在一台计算机上远程运行它,该脚本可以正常工作。我如何让它平行运行?

+1

您可以使用[jobs](http://stackoverflow.com/a/18193195/1630171)。 –

+0

根据您的环境,您最好只做一次下载,然后将其复制到其他机器,并使用invoke-command启动每个机器上的安装。 – mjolinor

回答

1

要在多台远程计算机上运行脚本,请使用PowerShell远程处理。这就要求每一个计算机您连接到了已启用PowerShell远程处理,你做的命令:

Enable-PSRemoting -Force 
从PC

然后,运行提升的控制台,使用Invoke命令来运行对多台计算机的脚本例如:

Invoke-Command -Computer server1,server2,server3 -Auth CredSSP ` 
    -FilePath c:\script.ps1 -ArgumentList scriptParameter1, scriptParameter2 

我建议你使用-Auth CredSSP,以避免与您的凭据第二跳的问题,因为你从远程计算机访问网络共享。此外,FilePath参数将获取本地脚本的路径,并将其内容复制到每台远程计算机。该脚本不应该依赖于其他脚本,除非它们存在于所有远程计算机上。最后,如果您使用凭据,则应该在所有远程计算机上管理权限。如果您不这样做,请使用-Credential参数为具有该帐户的帐户提供凭据。