我的csv中每台计算机的启动作业

时间:2014-09-12 13:18:35

标签: powershell csv automation powershell-v3.0

我正在为我的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。

感谢您的帮助

1 个答案:

答案 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
    }
}