Ocultar actualizaciones de Windows basadas en palabras clave con el módulo PSWindowsUpdate Powershell

Ocultar actualizaciones de Windows basadas en palabras clave con el módulo PSWindowsUpdate Powershell

Estoy intentando automatizar todo el proceso de actualización en la biblioteca donde trabajo. Escribí un script simple que me permite actualizar todos nuestros paquetes de software usando Chocolatey y realizar actualizaciones de Windows usando el módulo PSWindowsUpdate. Sin embargo, tengo algunas dificultades a la hora de ocultar las actualizaciones de Windows mediante PSWindowsUpdate. Parece bastante simple según los diversos artículos/documentación en línea que he leído, pero por alguna razón no me funciona. He hecho referencia específicamenteesta pregunta de Stackoverflowy he intentado aplicar la respuesta aceptada como mi solución, pero no hay problema. La respuesta aquí tampoco llega a lo que estoy tratando de lograr. Permítanme brindarles algunos antecedentes primero:

FONDO

Tengo 5 sistemas Windows 10 Pro y 11 sistemas Windows 7 Pro. Todos son de 64 bits. Todos los sistemas Windows 7 se han actualizado previamente a WMF 5.1. Estoy usando Remote Desktop Enterprise Edition para ejecutar scripts en varias computadoras simultáneamente para ayudarme a agilizar el proceso de actualización.

LO QUE HE INTENTADO

He pasado bastante tiempo intentando resolver mi propio problema mediante varias búsquedas en Google y prueba y error con mi script PS. Cuando ejecuto el script en mis máquinas remotas, todo se ejecuta y se actualiza bien. El problema, como ya mencioné, es que no siempre oculta las actualizaciones de Windows que he especificado (ya que probablemente me estoy equivocando en alguna parte jaja). Aquí está mi guión:

#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

EL PROBLEMA/PREGUNTA

Lo que quiero lograr en última instancia es ocultar ciertas actualizaciones según ciertas palabras clave que aparecen en el título de la actualización. Por ejemplo, tenemos Microsoft 2016 instalado en todas nuestras computadoras, pero quiero poder ocultar todas las actualizaciones de Outlook, OneDrive, Visio y Skype en las máquinas W10 y W7, y también Microsoft Security Essentials en las máquinas W7. ¿Existe una forma eficaz de utilizar el módulo PSWindowsUpdate para ocultar actualizaciones que contienen determinadas palabras?

NOTAS ADICIONALES

La pequeña línea de código que aparece en mi secuencia de comandos en la sección de actualizaciones ocultas está ahí simplemente para fines de prueba. Inicialmente intenté ocultar actualizaciones usando el título completo de dicha actualización. Por ejemplo, hubo numerosas actualizaciones para Outlook 2016 cuyo título era "Actualización de seguridad para Microsoft Outlook 2016" o simplemente "Actualización para Microsoft Outlook 2016". Intenté usar Hide-WUUpdate -Title "Update for Microsoft Outlook" -HideStatus:$true -Confirm:$falsetambién Hide-WUUpdate -Title "Security update for Microsoft Outlook" -HideStatus:$true -Confirm:$false. Esto no parece funcionar ya que cuando vi mis actualizaciones instaladas mostró que estaban instaladas 4 o 5 actualizaciones para Microsoft Outlook.

También intenté usar el comodín (*), pero creo que no entiendo completamente cómo funciona. Intenté algunas cosas como Hide-WUUpdate -Title "Update for Microsoft Outlook*" -HideStatus:$true -Confirm:$falsey Hide-WUUpdate -Title "Outlook*" -HideStatus:$true -Confirm:$false. Incluso probé un doble comodín con algo como Hide-WUUpdate -Title "*Microsoft Oulook*" -HideStatus:$true -Confirm:$false.

Por lo que he leído en TechNet y MSDN, el comodín (*) coincidirá con caracteres que comiencen en la posición especificada. ¿Esto se descompone si hay espacios incluidos?

Usar el ID de artículo de KB no es mi método preferido, ya que tendría que actualizar mi script cada vez con los nuevos ID de KB que necesito ocultar. Preferiría el enfoque de palabras clave si fuera posible. Intenté usar el método enumerado en la referencia de Stackoverflow anterior solo para sonreír y reír, pero en última instancia no es la solución que estoy buscando en este momento.

Respuesta1

Hide-WUUpdateEs posible que no admita la actualización de varios registros a la vez.

Un enfoque común para esto en Powershell es limitar los objetos al frente de la canalización y luego enviarlos a su acción al final de la canalización (por ejemplo Get-Process notepad | Stop-Process). Esto sólo se aplicará a este escenario si Hide-WUUpdateacepta objetos como entrada. Puede que no, solo permite el uso con su -Titlebandera, que puede no admitir múltiples entradas.

información relacionada