Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 如何在powershell中循环2个阵列?_Azure_Powershell - Fatal编程技术网

Azure 如何在powershell中循环2个阵列?

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.

我正在获取磁盘以及这些磁盘所连接的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.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,返回什么。。。等等