我有一个看起来像这样的变量:
插件 ID : 66334 主机:GCAB-L7-449090L 插件输出:. 微软操作系统补丁: + 要修补远程系统,您需要安装以下 Microsoft 补丁: - KB3167679 (MS16-101)(2 个漏洞)将涵盖以下 CVE: CVE-2016-3300、CVE-2016-3237 - KB3114340 (MS16-099)(133 个漏洞)将涵盖以下 CVE: CVE-2016-3313、CVE-2016-3315、CVE-2016-3316、CVE-2016-3317、CVE-2016-3318、 - KB3115427 (MS16-099)(133 个漏洞)将涵盖以下 CVE: CVE-2016-3313、CVE-2016-3315、CVE-2016-3316、CVE-2016-3317、CVE-2016-3318 插件 ID : 66334 主机:GCAB-L7-449096R 插件输出:. 微软操作系统补丁: + 要修补远程系统,您需要安装以下 Microsoft 补丁: - KB3167679 (MS16-101)(2 个漏洞)将涵盖以下 CVE: CVE-2016-3300、CVE-2016-3237 - KB3177725 (MS16-099)(58 个漏洞)将涵盖以下 CVE: CVE-2016-3313、CVE-2016-3315、CVE-2016-3316、CVE-2016-3317、CVE-2016-3318
我想要完成的是包含主机的 KB 数组。我认为哈希表是要走的路,但如果是这样,我就错过了对它们的关键理解。这是我的代码:
$filtered = $data | Where-Object {[string]$_."Plugin ID" -eq "66334"}
foreach ($item in $filtered)
{
$machine = $item.Host
$kbs = Select-String -InputObject $item.'Plugin Output' -Pattern $regex -AllMatches |
ForEach-Object { $_.Matches }
foreach ($k in $kbs)
{
if ($hash.ContainsKey($k))
{
#The KB is already a part of the hash table. Edit the key value to include the new host.
}
else
{
$hash[$k] = $machine
}
}
}
如果密钥不存在,则将其添加到哈希中,否则我将修改现有密钥的值以包含新主机。不幸的是,我的if
语句继续只执行 else 子句。
我想要达到的是:
知识库主机 KB3167679 GCAB-L7-449090L, GCAB-L7-449096R KB3114340 GCAB-L7-449090L KB3115427 GCAB-L7-449090L KB3177725 GCAB-L7-449096R
所以,有几个问题:
- 为什么不在
$hash.ContainsKey()
这里为我工作? - 哈希表是我想要的方式吗?