Скрытие обновлений Windows на основе ключевых слов с помощью модуля PSWindowsUpdate Powershell

Скрытие обновлений Windows на основе ключевых слов с помощью модуля PSWindowsUpdate Powershell

Я пытаюсь автоматизировать весь процесс обновления в библиотеке, где я работаю. Я написал простой скрипт, который позволяет мне обновлять все наши программные пакеты с помощью Chocolatey и выполнять обновления Windows с помощью модуля PSWindowsUpdate. Однако я сталкиваюсь с некоторыми трудностями, когда дело доходит до сокрытия обновлений Windows с помощью PSWindowsUpdate. Это кажется достаточно простым, согласно различным онлайн-статьям/документации, которые я читал, но по какой-то причине не работает для меня. Я специально ссылалсяэтот вопрос Stackoverflowи попытался применить принятый ответ как свое решение, но без говядины. Ответ здесь также не совсем соответствует тому, чего я пытаюсь добиться. Позвольте мне сначала предоставить некоторую предысторию:

ФОН

У меня 5 систем Windows 10 Pro и 11 систем Windows 7 Pro. Все 64-разрядные. Все системы Windows 7 были ранее обновлены до WMF 5.1. Я использую Remote Desktop Enterprise Edition для одновременного выполнения скриптов на нескольких компьютерах, чтобы упростить процесс обновления.

ЧТО Я ПОПЫТАЛСЯ СДЕЛАТЬ

Я потратил немало времени, пытаясь решить свою собственную проблему с помощью различных поисков в Google и проб и ошибок с моим скриптом PS. Когда я запускаю скрипт на своих удаленных машинах, все работает и обновляется просто отлично. Проблема, как я уже упоминал, в том, что он не всегда скрывает обновления Windows, которые я указал (потому что я, вероятно, где-то накосячил, ха-ха). Вот мой скрипт:

#This script will update all chocolatey packages and will also download install any new Windows Updates

#Begin ExecutionPolicy Set
Echo "Setting Execution Policy Settings"
Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy RemoteSigned -Force -Confirm:$false
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force -Confirm:$false

Echo "Initializing Unattended Update Automation Powershell Script"

#Begin Chocolatey Update
Echo "Updating Chocolatey Packages"

#Remove Java and reinstall 64-bit  only
cuninst jre8 -y
cinst jre8 -PackageParameters "/exclude:32" -y

#Queries Chocolatey.org database for updates to locally installed packages and updates them if necessary
cup all -y --ignore-checksums

#Begin Windows Update
Echo "Enabling Windows Update Services"
Get-Service bits, wuauserv | Set-Service -StartupType manual

Echo "Copying Module PSWindowsUpdate to PowerShell Modules Folder"
#Grabs copy of PSWindowsUpdate Module and copies it to remote machine
Copy-Item -Path \\DIROFFICE\WindowsUpdate\PSWindowsUpdate -Destination C:\Windows\System32\WindowsPowerShell\v1.0\Modules -recurse -force

Echo "Importing Powershell Module PSWindowsUpdate"
Import-Module -Name PSWindowsUpdate -force
refreshenv

Echo "Enabling updates for additional Microsoft components and software"
Add-WUServiceManager -ServiceID 7971f918-a847-4430-9279-4a52d1efe18d -Confirm:$false

Echo "Querying Microsoft Update Server for Windows Updates"
Get-WUList -MicrosoftUpdate

Echo "Hiding Unnecessary Updates"
Hide-WUUpdate -Title "Update for Microsoft OneDrive" -HideStatus:$true -Confirm:$false

Echo "Downloading and Installing Windows Updates"
Get-WUInstall -MicrosoftUpdate -acceptall

Echo "Stopping Windows Update Services"
Get-Service bits,wuauserv | Stop-Service

Echo "Setting CurrentUser Execution Policy Back to RemoteSigned"
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force -Confirm:$false

ПРОБЛЕМА/ВОПРОС

В конечном итоге я хочу скрыть определенные обновления на основе определенных ключевых слов, которые появляются в названии обновления. Например, у нас установлен Microsoft 2016 на всех наших компьютерах, но я хочу иметь возможность скрыть все обновления Outlook, OneDrive, Visio и Skype на машинах W10 и W7, а также Microsoft Security Essentials на машинах W7. Есть ли эффективный способ использовать модуль PSWindowsUpdate для скрытия обновлений, содержащих определенные слова?

ДОПОЛНИТЕЛЬНЫЕ ЗАМЕЧАНИЯ

Небольшая строка кода, указанная в моем скрипте в разделе сокрытия обновлений, находится там просто для целей тестирования. Сначала я пытался скрыть обновления, используя полное название указанного обновления. Например, было много обновлений для Outlook 2016, где название было либо «Обновление безопасности для Microsoft Outlook 2016», либо просто «Обновление для Microsoft Outlook 2016». Я пробовал использовать Hide-WUUpdate -Title "Update for Microsoft Outlook" -HideStatus:$true -Confirm:$falseкак , так и Hide-WUUpdate -Title "Security update for Microsoft Outlook" -HideStatus:$true -Confirm:$false. Похоже, это не работает, так как при просмотре установленных обновлений было показано, что установлено 4 или 5 обновлений для Microsoft Outlook.

Я также пробовал использовать подстановочный знак (*), но не думаю, что я полностью понимаю, как он работает. Я пробовал несколько вещей, таких как Hide-WUUpdate -Title "Update for Microsoft Outlook*" -HideStatus:$true -Confirm:$falseи Hide-WUUpdate -Title "Outlook*" -HideStatus:$true -Confirm:$false. Я даже пробовал двойной подстановочный знак с чем-то вроде Hide-WUUpdate -Title "*Microsoft Oulook*" -HideStatus:$true -Confirm:$false.

Из того, что я читал на TechNet и MSDN, подстановочный знак (*) будет соответствовать символам, начиная с указанной позиции. Это нарушается, если есть пробелы?

Использование идентификатора статьи базы знаний не является моим предпочтительным методом, поскольку мне пришлось бы обновлять свой скрипт каждый раз новыми идентификаторами базы знаний, которые мне нужно скрыть. Я бы предпочел подход с ключевыми словами, если это вообще возможно. Я пробовал использовать метод, указанный в приведенной выше ссылке Stackoverflow, просто ради усмешек и смеха, но это не то решение, которое я ищу прямо сейчас.

решение1

Hide-WUUpdateможет не поддерживать обновление нескольких записей одновременно.

Обычный подход к этому в Powershell — сузить ваши объекты в начале конвейера, а затем отправить их в ваше действие в конце конвейера (например, Get-Process notepad | Stop-Process). Это будет применяться только к этому сценарию, если Hide-WUUpdateпринимает объекты в качестве входных данных. Это может быть не так, разрешая использование только с его -Titleфлагом, который может не поддерживать множественные записи.

Связанный контент