Azure 如何在powershell中循环2个阵列?
我正在获取磁盘以及这些磁盘所连接的vm名称,然后我希望将disk name&vm name保存在一个变量中,作为json。当我运行下面的代码时,我没有得到想要的输出,有人能帮我找到正确的代码吗Azure 如何在powershell中循环2个阵列?,azure,powershell,Azure,Powershell,我正在获取磁盘以及这些磁盘所连接的vm名称,然后我希望将disk name&vm name保存在一个变量中,作为json。当我运行下面的代码时,我没有得到想要的输出,有人能帮我找到正确的代码吗 $disks=Get-AzDisk -ResourceGroupName MFA-RG | where {$_.ManagedBy -ne $null} | select name, managedby $vmlist=foreach ($name in $disks){ $name.ManagedBy.
$disks=Get-AzDisk -ResourceGroupName MFA-RG | where {$_.ManagedBy -ne $null} | select name, managedby
$vmlist=foreach ($name in $disks){
$name.ManagedBy.Split('/')[8]
}
$vmname=foreach ($name in $disks){
$name.Name
}
$vmname=@{}
for($i=0; $i -lt $disks.count; $i++){
$vmname[$i] = $vmlist[$i] }
$vmname | ConvertTo-Json
我期待像这样的输出
{
"disk 1" : "VM1",
"disk 2" : "VM2"
}
你很快就能实现你想要的。不过,您需要进行一些编辑:
$disks=Get-AzDisk -ResourceGroupName MFA-RG | where {$_.ManagedBy -ne $null} | select name, managedby
$vmlist=foreach ($name in $disks){
$name.ManagedBy.Split('/')[8]
}
$vmname=foreach ($name in $disks){
$name.Name
}
$HashOutput=[ordered]@{}
for($i=0; $i -lt $disks.count; $i++){
$HashOutput[$vmname[$i]] = $vmlist[$i] }
$HashOutput| ConvertTo-Json
您通过运行$vname=@{}
初始化了一个新的哈希表。这将擦除以前存储在$vmname
中的所有内容。您只需初始化一个新的哈希表,并使用$vmname
的索引值作为键
您必须谨慎使用这种编码方法,因为如果磁盘数为1,则访问$vmname[0]
和$vmlist[0]
将只产生这些字符串的第一个字符。这些变量将是[string]
类型,而不是[array]
。我建议对这种情况进行编码
说明:
[ordered]@{}
向PowerShell发送信号,以使用有序键创建新的哈希表对象。这意味着键/值对将按照它们添加到哈希表的顺序输出。
$HashOutput[$vmname[$i]]
将$i
计算为存储在变量中的当前整数值<代码>$vmname在本例中通常是数组类型,这意味着它的值被索引。由于$HashOutput
是一个哈希表,因此可以使用$HashOutput[“”]=“”
格式添加新的键/值对。在最终循环的第一次迭代中,$i
将为0。因此,$vmname[0]
将是该数组中的第一个元素。该元素将成为添加到哈希表的第一个键$vmlist[0]
将是添加到该键的相应值。您得到的输出是什么?如果只运行代码段,则一次运行一段。你得到了什么结果?意思是,运行$disks,返回什么,然后运行$vmlist,返回什么。。。等等