Это старый пост, но я поделюсь тем, что нашел при решении этой проблемы, в надежде, что другие могут найти его полезным.
Такое поведение является результатом того, что PowerShell не возвращает массив / коллекцию, когда из предложения WHERE возвращается один объект. На скриншоте ниже я провел тест с использованием аналогичного кода и разбил его по уровням MsrcSeverity. Серьезность без категории содержала единственное обновление, но PowerShell возвращал нулевое значение, когда я пытался получить счетчик.
Вы также можете видеть, что при вызове переменной $ uncategorizedupdates мне показывают фактическое обновление, а не коллекцию.
Снимок экрана с выводом
Чтобы исправить эту проблему, все, что нам нужно сделать, это явно определить нашу переменную как [массив], и тогда она вернет коллекцию объектов, даже если присутствует только один объект. Просто измените ваш код, как показано ниже ....
[array]$critical = $SearchResult.updates | where { $_.MsrcSeverity -eq "Critical" }
[array]$important = $SearchResult.updates | where { $_.MsrcSeverity -eq "Important" }
[array]$optional = $SearchResult.updates | where { ($_.MsrcSeverity -ne "Critical") -and ($_.MsrcSeverity -ne "Important") }
Я воспроизвел это и на Windows 10, так что это по-прежнему проблема даже в PowerShell 5. Надеюсь, это полезно.