powercli / powershell импортирует csv и вложенные циклы

У меня есть файл CSV с несколькими столбцами, из которых я выбираю 2 и 3 (просто игнорирую 1-й). Моя цель - выполнить команду с параметром «хэш» для каждого хоста. у каждого хоста есть 2 + n хеш-параметров, поэтому мне нужно найти способ выполнить n + 1 раз одну и ту же команду с другим параметром «хэш».

Логика моей цели такова:

connect to esx1 
execute "command -option 9221" 
execute "command -option 53301"

connect to esx12
execute "command -option 55799"
execute "command -option 51990"  

... etc

Проблема в том, что у меня есть имя хоста в каждой строке, и из приведенных ниже результатов вы можете видеть, что я снова и снова зацикливаюсь с одного и того же хоста, выполняя одни и те же «хеш-команды».

CSV content 
    magic   hostname        hash
    3   esx1.mylab.local    9221
    3   esx1.mylab.local    53301
    3   esx12.mylab.local   55799
    3   esx12.mylab.local   51990
    3   esx15.mylab.local   62157
    3   esx15.mylab.local   12796


$import = Import-Csv c:\mycsv.csv | select hostname,hash 
            foreach ($vmhost2 in $import.hostname){
    Write-Host "Connecting to $vmhost2"
            foreach ($myhash in $import.hash) {
        Write-Host "Executing magic for $vmhost2 with $myhash"
                                         }
                               }

РЕЗУЛЬТАТ

>>Connecting to esx1.mylab.local
Executing magic for esx1.mylab.local with 
Executing magic for esx1.mylab.local with 
Executing magic for esx1.mylab.local with 
Executing magic for esx1.mylab.local with 
Executing magic for esx1.mylab.local with 
Executing magic for esx1.mylab.local with 
Connecting to esx1.mylab.local
Executing magic for esx1.mylab.local with 
Executing magic for esx1.mylab.local with 
Executing magic for esx1.mylab.local with 
Executing magic for esx1.mylab.local with 
Executing magic for esx1.mylab.local with 
Executing magic for esx1.mylab.local with 
Connecting to esx12.mylab.local
Executing magic for esx12.mylab.local with 
Executing magic for esx12.mylab.local with 
Executing magic for esx12.mylab.local with 
Executing magic for esx12.mylab.local with 
Executing magic for esx12.mylab.local with 
Executing magic for esx12.mylab.local with 
Connecting to esx12.mylab.local
Executing magic for esx12.mylab.local with 
Executing magic for esx12.mylab.local with 
Executing magic for esx12.mylab.local with 
Executing magic for esx12.mylab.local with 
Executing magic for esx12.mylab.local with 
Executing magic for esx12.mylab.local with 
Connecting to esx15.mylab.local
Executing magic for esx15.mylab.local with 
Executing magic for esx15.mylab.local with 
Executing magic for esx15.mylab.local with 
Executing magic for esx15.mylab.local with 
Executing magic for esx15.mylab.local with 
Executing magic for esx15.mylab.local with 

Любое представление о логике. Я попытался создать CSV с уникальными именами хостов и оставить только столбец «хеш», но затем я нажал «невозможно подключиться к ПУСТОМУ»

 CSV content 
    magic   hostname        hash
    3   esx1.mylab.local    9221
    3                       53301
    3   esx12.mylab.local   55799
    3                       51990
    3   esx15.mylab.local   62157
    3                       12796

person Eazy Snatch    schedule 21.08.2017    source источник


Ответы (1)


Вам нужна команда Group!

$import = Import-Csv c:\mycsv.csv | select hostname,hash 
foreach ($vmhost2 in ($import|Group hostname)){
    Write-Host "Connecting to $($vmhost2.name)"
    foreach ($myhash in $vmhost2.group.hash) 
    {
        Write-Host "Executing magic for $($vmhost2.Name) with $myhash"
    }
 }

Это с вашим образцом CSV выводит это:

Connecting to esx1.mylab.local
Executing magic for esx1.mylab.local with 9221
Executing magic for esx1.mylab.local with 53301
Connecting to esx12.mylab.local
Executing magic for esx12.mylab.local with 55799
Executing magic for esx12.mylab.local with 51990
Connecting to esx15.mylab.local
Executing magic for esx15.mylab.local with 62157
Executing magic for esx15.mylab.local with 12796
person TheMadTechnician    schedule 21.08.2017
comment
Спасибо завтра проверю - person Eazy Snatch; 22.08.2017
comment
Если это решение сработало для вас, рассмотрите возможность пометить ответ как принятый (для этого должна быть опция слева, чуть ниже кнопок голосования). Это помогает обеспечить закрытие и позволяет будущим пользователям узнать, что есть решение, если у них возникнет та же проблема, и они будут искать решение. - person TheMadTechnician; 22.08.2017