powershell - powercli/powershell 导入 csv 和嵌套循环

标签 powershell powercli

我有一个包含多列的 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/

相关文章:

batch-file - 以登录用户身份在远程计算机上运行批处理文件

regex - 复杂的正则表达式(换行符、多个变量)

mysql - Powershell管道文件内容到应用程序而不在内存中加载文件

arrays - 获取数组的所有组合

powershell - 对于VIServer和PowerCLI,如何仅在PowerShell中第一次提示输入凭据,然后存储凭据并将其用于下一次脚本运行?

c# - 在 asp.net mvc 中执行 Powershell 和 Powercli 命令时如何设置超时

powershell - 使用 -File 参数调用时,如何让 powershell 返回正确的退出代码?

c# - 使用PowerCLI for .NET在VMware vSphere Client上拦截错误消息

powershell - 需要有关网络驱动器中的 Powershell Copy-Item 的帮助