Powershell 如何在import vapp命令中使用哈希表键值和数组?

Powershell 如何在import vapp命令中使用哈希表键值和数组?,powershell,powershell-2.0,powershell-3.0,powershell-4.0,Powershell,Powershell 2.0,Powershell 3.0,Powershell 4.0,这是我的哈希表,包含以下键值 $hostHash = @{3 = 'HostPC-1','HostPC-3','HostPC-5' ; 2 = 'HostPC-2','HostPC-4'} 我有2台esxi机器,并将其IP地址存储在以下阵列中 $esxarr = @(10.91.91.x18, 10.91.91.x19) 我试图在10.91.91.x18中同时部署3个虚拟机,在10.91.91.x19中同时部署2个虚拟机,下面是我实现目标的代码,但在迭代键值时遇到了问题 $esxflag =

这是我的哈希表,包含以下键值

$hostHash = @{3 = 'HostPC-1','HostPC-3','HostPC-5' ; 2 = 'HostPC-2','HostPC-4'}
我有2台esxi机器,并将其IP地址存储在以下阵列中

$esxarr = @(10.91.91.x18, 10.91.91.x19)
我试图在10.91.91.x18中同时部署3个虚拟机,在10.91.91.x19中同时部署2个虚拟机,下面是我实现目标的代码,但在迭代键值时遇到了问题

$esxflag = 0
$hostHash.GetEnumerator() | ForEach-Object {
$nn = $_.Value
for($it = 0; $it -le $nn.Length-1) {
Import-VApp -Source $hostpcpath -Name $nn[$it] -DiskStorageFormat Thin -VMHost $esxarray[$esxflag] -Datastore 'SSD'
    $esxflag = $esxflag+1
    $it = $it + 1
  }
}

请帮助我应用逻辑来读取第一个键的值('HostPC-1','HostPC-3','HostPC-5'),并在
10.91.91.x18(esxi机器1)
中部署虚拟机,以及在10.91.91.x19(esxi机器2)

中部署第二个键的值('HostPC-2','HostPC-4'),将IPAddress作为字符串处理
$esxarr=@('10.91.91.x18','10.91.91.x19'))
不带
Powershell无法理解数组。要计算数组中的元素数,最好使用
.count
而不是
.Length
。如果只有一个元素,
Length
将返回字符串的长度(字符串的字符数).
Count
将计算1个元素。您如何准确地获得应在哪个esx服务器上导入的虚拟机列表?它们是固定列表还是动态生成的?是否有点像每秒钟虚拟机都会进入另一台服务器?在当前示例中,简单的方法是告诉
esx1
导入所有(
foreach
$hostHash.3
和要在
$hostHash.2
中导入
foreach
的另一个服务器。将虚拟机外壳化为(re-)在导入期间以特定方式命名?$hosthash是一个动态哈希表,因为它基于用户输入,在某些情况下,我甚至可能使用4台以上的ESXi计算机。此外,我还没有找到将虚拟机导入其各自esx Server的确切方法,
$hosthash
中的每个阵列是否应硬编码到ESXi服务器?或者如何实现要确定哪个数组属于哪个服务器?顺便说一句:
Foreach
不是同时执行,而是连续执行。如果要同时执行,则需要或