C# 使用筛选器与作业并行编写脚本

C# 使用筛选器与作业并行编写脚本,c#,powershell,parallel-processing,C#,Powershell,Parallel Processing,我已经编写了一个脚本,它在Hyper-V中构建了数百个虚拟机,但现在它基于一个CSV文件(每行有一个虚拟机)为每个主机创建一个虚拟机 CSV input looks kinda like this: HOSTNAME,VMName,CPU,MEM,VHDPATH Host1,test1,2,4,D:\server2008.vhd Host1,test2,2,4,D:\server2k3.vhd Host2,test3,2,4,D:\server2k3.vhd Host2,test4,2,4,D:

我已经编写了一个脚本,它在Hyper-V中构建了数百个虚拟机,但现在它基于一个CSV文件(每行有一个虚拟机)为每个主机创建一个虚拟机

CSV input looks kinda like this:
HOSTNAME,VMName,CPU,MEM,VHDPATH
Host1,test1,2,4,D:\server2008.vhd
Host1,test2,2,4,D:\server2k3.vhd
Host2,test3,2,4,D:\server2k3.vhd
Host2,test4,2,4,D:\server2k3.vhd
Host3,test5,2,4,D:\server2k3.vhd
Host3,test6,2,4,D:\server2k3.vhd
我想做的是,如果同一台主机上有多个虚拟机(如上所述),我只想一次在上面构建一个虚拟机,但并行地,我想在其他主机上构建虚拟机。其思想是,每个主机将创建一个VM,并且在不同的主机上并行地发生多个创建。当VM完成时,它会向下移动该主机的列表,然后构建下一个。理论上,应同时创建3个虚拟机,每个主机1个

我已经试过找工作了,但是做不好,请告诉我!先谢谢你

更新


如何获取输入文件,创建一个基于主机划分为阵列的机器列表。然后针对每个主机、每个阵列执行此操作?

如果您使用的是PowerShell V3,请使用工作流

workflow Provision-VM {
    param([psobject[]]$HostInfo)

    foreach -parallel ($host in $HostInfo) {
        foreach ($vmInfo in $host.VM) {
            Invoke-Command -cn $host.Name -File path-to-script.ps1 -Arg $vmInfo
        }
    }
}
我会将每个主机的VM信息整合到每个主机的单个自定义对象中,并将其传递到工作流中。一般来说,我不会在工作流中执行细粒度脚本,尤其是在调用工作流之前可以完成脚本的时候

HostInfo对象如下所示:

$hostInfo += [pscustomobject]@{Name='Host1';VM=@([pscustomobject]@{Name='test1';CPU=2;MEM=4;VHDPATH='c:\...'},[pscustomobject]@{... next VM ...})}

向我们展示您所拥有的功能。有关具有大小限制的作业队列的示例,请参阅。