我见过有关并行执行并行或并行运行函数的不同文章,但是答案中的代码对我而言并不奏效。我正在执行修补程序自动化,并且我所有的功能都可以工作,并且要分别完成它们的工作,但是由于我们使用的计算机超过200台,因此等待每项功能完成其批次的计算机都无法达到目的。我将代码包含在一个脚本中,并概括地说,其结构如下:
$ global:varN
功能子功能1()
功能子功能N()
function InstallGoogleFunction($ global:varN){
$ var1
$ result1 =子功能1
$ resultN =子功能N
}
function InstallVLCFunction($ global:varN){
“与上述相似的代码”
}
function 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'