循环并向Hashtable添加数据

时间:2017-03-28 21:29:36

标签: powershell hashtable

我正在使用软件列表和Import-Excel模块(Link),尝试创建软件名称和版本号的哈希表,每个主机都作为自己的工作表导出。我在模块中使用Export-MultipleExcelSheets cmdlet。

以下是我的$ Inventory变量的示例:

Count Name                      Group                                                                                                                                                                                                  
----- ----                      -----                                                                                                                                                                                                  
  103 10.105.122.27             {@{Host=10.105.122.27; Name=Update Rollup 10 for Exchange Server 2010 Service Pack 3 (KB3049853); Version=1}, @{Host=10.105.122.27; Name=Update Rollup 14 for Exchange Server 2010 Service Pack 3 (K...
  103 10.105.122.28             {@{Host=10.105.122.28; Name=Update Rollup 10 for Exchange Server 2010 Service Pack 3 (KB3049853); Version=1}, @{Host=10.105.122.28; Name=Update Rollup 14 for Exchange Server 2010 Service Pack 3 (K...
  119 10.105.76.221             {@{Host=10.105.76.221; Name=Update Rollup 10 for Exchange Server 2010 Service Pack 3 (KB3049853); Version=1}, @{Host=10.105.76.221; Name=Update Rollup 15 for Exchange Server 2010 Service Pack 3 (K...
  116 10.105.76.222             {@{Host=10.105.76.222; Name=Update Rollup 15 for Exchange Server 2010 Service Pack 3 (KB3184728); Version=1}, @{Host=10.105.76.222; Name=Update Rollup 16 for Exchange Server 2010 Service Pack 3 (K...

以下是我尝试使用的代码:

    Foreach ($I In $Inventory)
    {
        $DataToGather.Add($I.Name, {$I.Group | Select-Object Name, Version})
    }

    Export-MultipleExcelSheets -Show -Autosize -Path "C:\Path\To\Software Inventory.xlsx" $DataToGather

我的代码没有错误,但它导致10张相同的软件列表(我知道这些机器没有完全相同的软件列表)。

对我正在做的事情有没有更好的方式?

1 个答案:

答案 0 :(得分:1)

ScriptBlock { }可能会导致您看到的行为,您应该将ScriptBlock { }方法中的Add更改为Parenthesis ( )

Foreach ($I In $Inventory)
{
    # Change the $i.Group section to be surrounded by Parenthesis
    $DataToGather.Add($I.Name, ($I.Group | Select-Object Name, Version))
}

如果这不起作用,请尝试注释掉Export-MultupleExcelSheets函数,只需返回$DataToGather变量即可查看结果,这可能会帮助您缩小问题范围。