У меня есть переменная, которая выглядит следующим образом:Является ли хеш-таблица дальней связи?
Plugin ID : 66334 Host : GCAB-L7-449090L Plugin Output : . Microsoft Operating System Patches : + To patch the remote system, you need to install the following Microsoft patches : - KB3167679 (MS16-101) (2 vulnerabilities)The following CVEs would be covered: CVE-2016-3300, CVE-2016-3237 - KB3114340 (MS16-099) (133 vulnerabilities)The following CVEs would be covered: CVE-2016-3313, CVE-2016-3315, CVE-2016-3316, CVE-2016-3317, CVE-2016-3318, - KB3115427 (MS16-099) (133 vulnerabilities)The following CVEs would be covered: CVE-2016-3313, CVE-2016-3315, CVE-2016-3316, CVE-2016-3317, CVE-2016-3318 Plugin ID : 66334 Host : GCAB-L7-449096R Plugin Output : . Microsoft Operating System Patches : + To patch the remote system, you need to install the following Microsoft patches : - KB3167679 (MS16-101) (2 vulnerabilities)The following CVEs would be covered: CVE-2016-3300, CVE-2016-3237 - KB3177725 (MS16-099) (58 vulnerabilities)The following CVEs would be covered: CVE-2016-3313, CVE-2016-3315, CVE-2016-3316, CVE-2016-3317, CVE-2016-3318
То, что я пытаюсь сделать это массив KBS, содержащих узлы. Я думал, что хеш-таблица - это путь, но если это, я пропустил ключевую часть понимания о них. Вот мой код:
$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.
То, что я хочу, чтобы добраться до это:
KB Host KB3167679 GCAB-L7-449090L, GCAB-L7-449096R KB3114340 GCAB-L7-449090L KB3115427 GCAB-L7-449090L KB3177725 GCAB-L7-449096R
Итак, несколько вопросов:
- Почему не
$hash.ContainsKey()
работает для меня здесь? - Является ли хэш-таблицей так, как я хочу?
'ForEach-Object {$ _. Matches}' -> 'ForEach-Object {$ _. Matches} | ForEach-Object {$ _. Value} ' – PetSerAl
Или (в PowerShell 3.0 и новее):' ForEach-Object {$ _. Matches.Value} ' –