Вы очень близки к выполнению того, что вы хотите.Вам нужно сделать несколько правок:
$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
Вы инициализировали новую хеш-таблицу, запустив $vnname = @{}
.Это стерло все, что вы ранее хранили в $vmname
.Вы можете просто инициализировать новую хеш-таблицу и использовать в качестве ключей индексированные значения $vmname
.
Вы должны быть осторожны в этом подходе в кодированном виде, потому что если число дисков равно 1, то доступ к $vmname[0]
и$vmlist[0]
приведет только к первым символам этих соответствующих строк.Эти переменные будут иметь тип [string]
, а не [array]
.Я бы порекомендовал написать код для этого условия.
Объяснение:
[ordered]@{}
сигнализирует PowerShell о создании нового объекта хеш-таблицы с упорядоченными ключами.Это означает, что пары ключ / значение будут выводиться в том порядке, в котором они были добавлены в хеш-таблицу.$HashOutput[$vmname[$i]]
оценивает $i
как текущее целочисленное значение, хранящееся в переменной.$vmname
обычно будет типом массива в этом случае, что означает, что его значения проиндексированы.Поскольку $HashOutput
является хеш-таблицей, вы можете добавить новую пару ключ / значение в формате $HashOutput["<key>"] = "<value>"
.На первой итерации последнего цикла $i
будет 0. Поэтому $vmname[0]
будет первым элементом в этом массиве.Этот элемент станет первым ключом, добавленным в хэш-таблицу.$vmlist[0]
будет соответствующим значением, добавленным к этому ключу.