我正在为我的csv中的每台计算机寻找一种新工作的方法,以便在每台计算机上启动并行作业。
我已经有了这个
$job1 = Start-Job -Scriptblock {
$Csv = "C:\springfield\Citrix\CitrixComposants.csv"
$myservers = Import-Csv $Csv
Import-module C:\springfield\Citrix\CitrixDeploymentActivlanModule.ps1
Deploy-Citrix -servers $myservers[0].server -component $myservers[0].component
}
如何获得$ job [n]和我的csv中的服务器一样多?
我正在考虑这样的事情,但也许有更好的方法来实现这一目标。 我的想法是创建一个动态的$ job变量($ job1,$ job2,$ job3,$ job [n] ...)
$Csv = "C:\springfield\Citrix\CitrixComposants.csv"
for ($i=0;$i -lt $csv.count; $i++)
{
$job+"$i" = Start-Job -Scriptblock {
$Csv = "C:\springfield\Citrix\CitrixComposants.csv"
$myservers = Import-Csv $Csv
Import-module C:\springfield\Citrix\CitrixDeploymentActivlanModule.ps1
Deploy-Citrix -servers $myservers[$i].server -component $myservers[$i].component
}
}
我也希望当一份工作完成后它告诉我它已经完成了,我该怎么办?
我正在使用powershell v4。
感谢您的帮助
答案 0 :(得分:1)
好吧,目前您正在为所有服务器运行一个作业。或者如果你没有指定$ Myservers [0],那就是你。
如果返回任何结果,您可以使用receive-job查看结果。我认为结果将包含从每个服务器返回的输出,假设您删除了$ myservers [0]并且deploy-citrix cmdlet接受了一个数组。如果您只想查看状态,可以使用get-job。
如果你想为每个服务器开始一个工作,它应该看起来更像这样:
$Csv = "C:\springfield\Citrix\CitrixComposants.csv"
$myservers = Import-Csv $Csv
Foreach ($Server in $MyServers)
{
$SrvName = $Server.Server
$Component = $Server.Component
Start-Job -ArgumentList $SrvName,$Component -Scriptblock {
Param ($SrvName,$Component)
Import-module C:\springfield\Citrix\CitrixDeploymentActivlanModule.ps1
Deploy-Citrix -servers $Srvname -component $component
}
}