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

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .