Я пытаюсь автоматизировать весь процесс обновления в библиотеке, где я работаю. Я написал простой скрипт, который позволяет мне обновлять все наши программные пакеты с использованием 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, только для ухмылок и хихиканья, но в конечном итоге это не то решение, которое я сейчас ищу.