我有一个包含多列的 CSV 文件,我从中选择 2 和 3(只需忽略第一个) 我的目标是为每个主机执行带有“hash”参数的命令。每个主机都有 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
任何逻辑想法。我尝试使用 uniq 主机名创建 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
最佳答案
您需要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
关于powershell - powercli/powershell 导入 csv 和嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45803093/