Ocultando as atualizações do Windows com base em palavras-chave com o PSWindowsUpdate Powershell Module

0

Estou tentando automatizar todo o processo de atualização na biblioteca em que trabalho. Escrevi um script simples que me permite atualizar todos os nossos pacotes de software usando o Chocolatey e executar atualizações do Windows usando o módulo PSWindowsUpdate. No entanto, estou encontrando algumas dificuldades quando se trata de esconder as atualizações do Windows usando o PSWindowsUpdate. Parece bastante simples de acordo com os vários artigos on-line / documentação que li, mas por alguma razão não está funcionando para mim. Referenciei especificamente esta questão do Stackoverflow e tentei aplicar a resposta aceita como minha solução, mas sem carne. A resposta aqui também não chega ao que estou tentando realizar. Deixe-me fornecer alguns antecedentes primeiro:

ANTECEDENTES

Eu tenho 5 sistemas Windows 10 Pro e 11 sistemas Windows 7 Pro. Todos são de 64 bits. Os sistemas Windows 7 foram todos atualizados anteriormente para o WMF 5.1. Estou usando o Remote Desktop Enterprise Edition para executar scripts em vários computadores simultaneamente para ajudar a simplificar o processo de atualização.

O QUE TENHO TENTADO

Eu passei um bom tempo tentando resolver meu próprio problema por meio de várias pesquisas do Google e tentativa e erro com meu script PS. Quando executo o script em minhas máquinas remotas, tudo é executado e atualiza muito bem. O problema, como já mencionei, é que nem sempre oculta as atualizações do Windows que eu especifiquei (já que provavelmente estou bagunçando em algum lugar haha). Aqui está meu script:

#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

O PROBLEMA / PERGUNTA

O que eu quero fazer é esconder algumas atualizações com base em determinadas palavras-chave que aparecem no título da atualização. Por exemplo, temos o Microsoft 2016 instalado em todos os nossos computadores, mas quero poder ocultar todas as atualizações do Outlook, OneDrive, Visio e Skype nas máquinas W10 e W7, além do Microsoft Security Essentials nas máquinas W7. Existe uma maneira eficaz de usar o módulo PSWindowsUpdate para ocultar as atualizações que contêm certas palavras?

NOTAS ADICIONAIS

A pequena linha de código listada no meu script na seção de ocultação de atualizações existe apenas para fins de teste. Eu inicialmente tentei esconder as atualizações usando o título completo da atualização. Por exemplo, havia inúmeras atualizações para o Outlook 2016 em que o título era "Atualização de segurança para o Microsoft Outlook 2016" ou simplesmente "Atualização para o Microsoft Outlook 2016". Eu tentei usar Hide-WUUpdate -Title "Update for Microsoft Outlook" -HideStatus:$true -Confirm:$false e Hide-WUUpdate -Title "Security update for Microsoft Outlook" -HideStatus:$true -Confirm:$false . Isso não parece funcionar como quando eu vi minhas atualizações instaladas mostrou que 4 ou 5 atualizações para o Microsoft Outlook foram instaladas.

Eu também tentei usar o caractere curinga (*), mas não acho que entendi como ele funciona. Eu tentei algumas coisas como Hide-WUUpdate -Title "Update for Microsoft Outlook*" -HideStatus:$true -Confirm:$false e Hide-WUUpdate -Title "Outlook*" -HideStatus:$true -Confirm:$false . Eu até tentei um curinga duplo com algo como Hide-WUUpdate -Title "*Microsoft Oulook*" -HideStatus:$true -Confirm:$false .

Pelo que li no TechNet e no MSDN, o caractere curinga (*) corresponderá aos caracteres que começam na posição especificada. Isso falha se houver espaços incluídos?

O uso do ID de artigo da base de conhecimento não é meu método preferido, pois eu precisaria atualizar meu script todas as vezes com as novas IDs de KB que preciso ocultar. Eu prefiro muito mais a abordagem de palavras-chave, se possível. Eu tentei usar o método listado na referência acima Stackoverflow apenas para sorrisos e risos, mas não é, finalmente, a solução que estou procurando agora.

    
por ahelton 12.08.2017 / 19:20

1 resposta

0

Hide-WUUpdate pode não suportar a atualização de vários registros de uma só vez.

Uma abordagem comum para isso em Powershell é restringir seus objetos na frente do pipeline e, em seguida, enviá-los para sua ação no final do pipeline (por exemplo, Get-Process notepad | Stop-Process ). Isso só se aplicará a este cenário se Hide-WUUpdate aceitar objetos como entrada. Pode não permitir apenas o uso com seu sinal -Title , que pode não suportar várias entradas.

    
por 15.08.2017 / 14:18