Function 使用PowerShell同时运行修补程序自动化功能

Function 使用PowerShell同时运行修补程序自动化功能,function,powershell,parallel-processing,automation,powershell-remoting,Function,Powershell,Parallel Processing,Automation,Powershell Remoting,我看到过关于并行或同时并行运行函数的不同帖子,但答案中的代码对我来说并不太有效。我正在做配线自动化,我所有的功能都可以独立工作,但由于我们使用的是200多台计算机,等待每一个功能与它的一批计算机一起完成,这有点违背了我的目的。我将代码放在一个脚本中,总的来说,其结构如下: 定义全局变量 $global:varN 定义子功能 功能子-功能1() 函数子函数-functionN() 定义主要功能 函数InstallGoogleFunction($global:varN) { $var1 $resul

我看到过关于并行或同时并行运行函数的不同帖子,但答案中的代码对我来说并不太有效。我正在做配线自动化,我所有的功能都可以独立工作,但由于我们使用的是200多台计算机,等待每一个功能与它的一批计算机一起完成,这有点违背了我的目的。我将代码放在一个脚本中,总的来说,其结构如下:

定义全局变量 $global:varN

定义子功能 功能子-功能1()

函数子函数-functionN()

定义主要功能 函数InstallGoogleFunction($global:varN) {

$var1

$result1=子功能1

$resultN=子函数n

}

函数installvlc函数($global:varN) {

“与上述代码类似”

}

函数InstallAppFunction($global:varN) {

“与上述代码类似”

}


这些功能都将安装不同的应用程序/软件,并将输出写入文件。唯一的问题是,我似乎无法在不等待第一个函数完成的情况下运行所有安装函数。我尝试启动作业代码,但它执行并显示类似于表的输出,但在验证计算机时,任务管理器上没有任何运行。powershell是否有办法同时运行此安装功能?如果我不得不一个接一个地调用函数,我会用最少的时间调用函数,或者用最少的计算机读取它们需要安装的函数。我会的,但我只是想有人更好地解释一下这是否可以做到。

你可以使用多线程来实现这一点。下面的示例显示了如何在PowerShell中使用多线程在多个服务器上触发任务

用您的计算机替换
$Computers
中的计算机列表,并尝试一下。下面的示例获取给定计算机上的磁盘详细信息

# This is your script you want to execute
$wmidiskblock = 
{ 
  Param($ComputerName = "LocalHost") 
  Get-WmiObject -ComputerName $ComputerName -Class win32_logicaldisk |  Where-Object {$_.drivetype -eq 3} 
} 

# List of servers
$Computers = @("Machine1", "Machine2", "Machine3")  

#Start all jobs in parallel 
ForEach($Computer in $Computers) 
{ 
   Write-Host $Computer 
   Start-Job -scriptblock $wmidiskblock  -ArgumentList $Computer 
} 

Get-Job | Wait-Job 

$out = Get-Job | Receive-Job 
$out |export-csv 'c:\temp\wmi.csv'

您的意思是说您想在同一台计算机上同时并行安装多个软件?您的软件安装是否需要重新启动目标计算机?同时在多台远程计算机上安装多个软件。无需重新启动其中任何一台。若要在多台远程计算机上并行运行代码,请使用。顺便说一句:如果使用全局变量,不仅没有必要将它们声明为参数,实际上也不起作用。这将在本地并行运行代码(即使代码恰好是针对远程机器的
Get WmiObject
调用)。我认为OP的目的是在远程机器上并行运行代码。还要注意,
Start Job
使用子进程,而不是线程(这就是为什么它非常慢的原因);但是,有一个基于线程的
Start-ThreadJob
cmdlet可通过
ThreadJob
模块获得(随PowerShell v6+提供,可在旧版本中下载)。