Powershell foreach на два массива - PullRequest
0 голосов
/ 11 марта 2020

У меня есть 2x массива $ arrayRG:

testRG1
testRG2
testRG3

и соответствующий $ arrayVM:

testVM1
testVM2
testVM3

Как запустить этот код ниже, чтобы остановить виртуальные машины, поэтому значения будут взяты из массивов , что-то вроде:

Stop-AzureRmVM -ResourceGroupName "testRG1" -Name "testVM1"
...

Попытка foreach logi c, но не могу понять, как получить оба значения, как показано ниже, только ResourceGroup:

foreach ($VM in $arrayRG)
{
    Stop-AzureRmVM -ResourceGroupName $VM -Name "how to get name here?"
}

---- -------- Пробовал другой вариант -----

Использование таблиц ha sh, но все равно не повезло. Удалось получить $ ha sh следующим образом:

Name        Value
testRG1     TestVM1
testRG2     TestVM2
testRG3     TestVM3

при попытке foreach на таблице ha sh:

foreach ($VM in $hash)
{
    Stop-AzureRmVM -ResourceGroupName $VM.Keys -Name $VM.Values
}

Также выше не удается. Как это можно решить?

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

Если между двумя массивами существует отношение один к одному, вы можете использовать for l oop и получать доступ к одному и тому же индексу в каждом массиве:

for ($i = 0; $i -lt $arrayRG.Count; $i++) {
    Stop-AzureRmVM -ResourceGroupName $arrayRG[$i] -Name $arrayVM[$i]
}

Вы можете сделать что-то похожее с табличным подходом ha sh. Вам просто нужно сначала перечислить пары ключей.

$hash.GetEnumerator() | Foreach {
    Stop-AzureRmVM -ResourceGroupName $_.Key -Name $_.Value
}
1 голос
/ 11 марта 2020

Вы можете использовать хеш-таблицу, посмотрев ключи, а затем используя их, чтобы получить значения

foreach($key in $hashtable.Keys) {
    $key                  # Prints the name
    $hashtable[$key]      # Prints the value

    Stop-AzureRmVM -ResourceGroupName $key -Name $hashtable[$key]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...