【问题标题】:Loop and Add Data to a Hashtable循环并将数据添加到哈希表
【发布时间】:2017-03-28 21:29:35
【问题描述】:

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

这是我的 $Inventory 变量的示例:

计数名称组 ----- ---- ----- 103 10.105.122.27 {@{主机=10.105.122.27;名称 = Exchange Server 2010 Service Pack 3 (KB3049853) 的更新汇总 10;版本=1},@{主机=10.105.122.27;名称 = Exchange Server 2010 Service Pack 3 的更新汇总 14 (K... 103 10.105.122.28 {@{主机=10.105.122.28;名称 = Exchange Server 2010 Service Pack 3 (KB3049853) 的更新汇总 10;版本=1},@{主机=10.105.122.28;名称 = Exchange Server 2010 Service Pack 3 的更新汇总 14 (K... 119 10.105.76.221 {@{主机=10.105.76.221;名称 = Exchange Server 2010 Service Pack 3 (KB3049853) 的更新汇总 10;版本=1},@{主机=10.105.76.221;名称 = Exchange Server 2010 Service Pack 3 的更新汇总 15 (K... 116 10.105.76.222 {@{主机=10.105.76.222;名称 = Exchange Server 2010 Service Pack 3 (KB3184728) 的更新汇总 15;版本=1},@{主机=10.105.76.222;名称 = Exchange Server 2010 Service Pack 3 的更新汇总 16 (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 张具有相同软件列表的工作表(我知道这些机器没有完全相同的软件列表)。

有没有更好的方法来做我正在做的事情?

【问题讨论】:

    标签: powershell hashtable


    【解决方案1】:

    ScriptBlock { } 可能会导致您看到的行为,您应该将 Add 方法中的 ScriptBlock { } 改为 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 变量以查看结果,这可能会帮助您缩小问题范围。

    【讨论】:

    • 确实是问题所在 - 一旦我删除它,我就能得到我所期望的东西。现在我在 Export-MultipleExcelSheets cmdlet 上遇到了一个不同的错误,但这是另一天的不同问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2011-07-26
    • 2020-06-30
    • 2016-09-03
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    相关资源
    最近更新 更多