Mam 2x tablicy $ Arrayrg:

testRG1
testRG2
testRG3

I odpowiednie $ Arrayvm:

testVM1
testVM2
testVM3

Jak uruchomić ten kod poniżej, aby zatrzymać VMS, więc wartości zostaną pobrane z tablic, coś w rodzaju:

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

Próbuję logiki Foreach, ale nie może dowiedzieć się, jak chwycić obie wartości, jak poniżej zajmuje tylko zasobów:

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

------------ Inne opcja próbowała ----

Używanie stołów Hash, ale nadal nie ma szczęścia. Udało się, aby dostać tak jak hash:

Name        Value
testRG1     TestVM1
testRG2     TestVM2
testRG3     TestVM3

Kiedy próbowałem foreach na stole Hash:

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

Również nie powiedzie się powyżej. Jak można to rozwiązać?

0
Mund 11 marzec 2020, 16:29

2 odpowiedzi

Najlepsza odpowiedź

Jeśli istnieje związek jeden do jednego między dwoma tablicami, można użyć pętli for i uzyskać dostęp do tego samego indeksu w każdej tablicy:

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

Możesz zrobić coś podobnego z podejściem stołowym Hash. Po prostu trzeba najpierw wyliczyć kluczowe pary.

$hash.GetEnumerator() | Foreach {
    Stop-AzureRmVM -ResourceGroupName $_.Key -Name $_.Value
}
2
AdminOfThings 11 marzec 2020, 13:31

Możesz użyć hashtable, patrząc na klucze, a następnie używając tych, aby uzyskać wartości

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

    Stop-AzureRmVM -ResourceGroupName $key -Name $hashtable[$key]
}
1
Jawad 11 marzec 2020, 13:34