0

我编写了一个脚本,在 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

我想要做的是,如果同一主机上有多个虚拟机(例如上面),我想一次只在上面构建一个虚拟机,但同时,我想在其他主机上构建虚拟机。这个想法是每个主机将创建 1 个虚拟机,并且将在不同的主机上并行进行多个创建。当 VM 完成时,它会向下移动该主机的列表并接下来构建。理论上,应该同时创建 3 个 VM,每个主机 1 个。

我尝试过设置工作,但无法正确设置,请指教!先感谢您

更新

我将如何获取输入文件,创建一个基于主机分隔成数组的机器列表。然后每个主机,每个阵列做这个工作?

4

1 回答 1

0

如果您使用的是 PowerShell V3,请使用 Workflow。

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 ...})}
于 2013-10-16T22:51:13.493 回答