Ausblenden von Windows-Updates basierend auf Schlüsselwörtern mit dem PSWindowsUpdate Powershell-Modul

Ausblenden von Windows-Updates basierend auf Schlüsselwörtern mit dem PSWindowsUpdate Powershell-Modul

Ich versuche, den gesamten Update-Prozess in der Bibliothek, in der ich arbeite, zu automatisieren. Ich habe ein einfaches Skript geschrieben, mit dem ich sowohl alle unsere Softwarepakete mit Chocolatey aktualisieren als auch Windows-Updates mit dem Modul PSWindowsUpdate durchführen kann. Ich habe jedoch einige Schwierigkeiten, wenn es darum geht, Windows-Updates mit PSWindowsUpdate zu verbergen. Laut den verschiedenen Online-Artikeln/Dokumentationen, die ich gelesen habe, scheint es recht einfach zu sein, aber aus irgendeinem Grund funktioniert es bei mir nicht. Ich habe ausdrücklich verwiesen aufdiese Stackoverflow-Frageund habe versucht, die akzeptierte Antwort als meine Lösung anzuwenden, aber ohne Erfolg. Die Antwort hier kommt auch nicht ganz auf das zu sprechen, was ich erreichen möchte. Lassen Sie mich zunächst einige Hintergrundinformationen geben:

HINTERGRUND

Ich habe 5 Windows 10 Pro-Systeme und 11 Windows 7 Pro-Systeme. Alle sind 64-Bit. Die Windows 7-Systeme wurden alle zuvor auf WMF 5.1 aktualisiert. Ich verwende Remote Desktop Enterprise Edition, um Skripte auf mehreren Computern gleichzeitig auszuführen und so den Aktualisierungsprozess zu optimieren.

WAS ICH VERSUCHT HABE

Ich habe ziemlich viel Zeit damit verbracht, mein eigenes Problem durch verschiedene Google-Suchen und Ausprobieren mit meinem PS-Skript zu lösen. Wenn ich das Skript auf meinen Remote-Rechnern ausführe, läuft alles einwandfrei und wird aktualisiert. Das Problem besteht, wie ich bereits erwähnt habe, darin, dass die von mir angegebenen Windows-Updates nicht immer ausgeblendet werden (da ich wahrscheinlich irgendwo einen Fehler mache, haha). Hier ist mein Skript:

#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

DAS PROBLEM/DIE FRAGE

Was ich letztendlich erreichen möchte, ist, bestimmte Updates basierend auf bestimmten Schlüsselwörtern auszublenden, die im Titel des Updates vorkommen. Beispielsweise haben wir Microsoft 2016 auf allen unseren Computern installiert, aber ich möchte alle Outlook-, OneDrive-, Visio- und Skype-Updates sowohl auf W10- als auch auf W7-Rechnern sowie Microsoft Security Essentials auf W7-Rechnern ausblenden können. Gibt es eine effektive Möglichkeit, das PSWindowsUpdate-Modul zu verwenden, um Updates auszublenden, die bestimmte Wörter enthalten?

ZUSÄTZLICHE BEMERKUNGEN

Die kleine Codezeile, die in meinem Skript unter dem Abschnitt „Updates verbergen“ aufgeführt ist, dient lediglich Testzwecken. Ich habe zunächst versucht, Updates zu verbergen, indem ich den vollständigen Titel des jeweiligen Updates verwendet habe. Beispielsweise gab es zahlreiche Updates für Outlook 2016, deren Titel entweder „Sicherheitsupdate für Microsoft Outlook 2016“ oder einfach nur „Update für Microsoft Outlook 2016“ lautete. Ich habe versucht, Hide-WUUpdate -Title "Update for Microsoft Outlook" -HideStatus:$true -Confirm:$falsesowohl als auch zu verwenden Hide-WUUpdate -Title "Security update for Microsoft Outlook" -HideStatus:$true -Confirm:$false. Dies scheint nicht zu funktionieren, da beim Anzeigen meiner installierten Updates angezeigt wurde, dass 4 oder 5 Updates für Microsoft Outlook installiert waren.

Ich habe auch versucht, das Platzhalterzeichen (*) zu verwenden, aber ich glaube nicht, dass ich ganz verstehe, wie es funktioniert. Ich habe ein paar Dinge wie Hide-WUUpdate -Title "Update for Microsoft Outlook*" -HideStatus:$true -Confirm:$falseund ausprobiert Hide-WUUpdate -Title "Outlook*" -HideStatus:$true -Confirm:$false. Ich habe sogar ein doppeltes Platzhalterzeichen mit etwas wie ausprobiert Hide-WUUpdate -Title "*Microsoft Oulook*" -HideStatus:$true -Confirm:$false.

Soweit ich es auf TechNet und MSDN gelesen habe, stimmt das Platzhalterzeichen (*) mit Zeichen überein, die an der angegebenen Position beginnen. Funktioniert das nicht, wenn Leerzeichen enthalten sind?

Die Verwendung der KB-Artikel-ID ist nicht meine bevorzugte Methode, da ich mein Skript jedes Mal mit den neuen KB-IDs aktualisieren müsste, die ich verbergen muss. Wenn möglich, würde ich den Schlüsselwortansatz viel lieber verwenden. Ich habe versucht, die in der obigen Stackoverflow-Referenz aufgeführte Methode nur zum Spaß zu verwenden, aber es ist nicht die Lösung, nach der ich im Moment suche.

Antwort1

Hide-WUUpdateunterstützt möglicherweise nicht die gleichzeitige Aktualisierung mehrerer Datensätze.

Ein gängiger Ansatz hierfür in Powershell besteht darin, Ihre Objekte am Anfang der Pipeline einzugrenzen und sie dann am Ende der Pipeline an Ihre Aktion zu senden (z. B. Get-Process notepad | Stop-Process). Dies gilt nur für dieses Szenario, wenn Hide-WUUpdateObjekte als Eingabe akzeptiert werden. Möglicherweise ist dies nicht der Fall, sondern es ist nur die Verwendung mit seinem -TitleFlag möglich, das möglicherweise keine Mehrfacheinträge unterstützt.

verwandte Informationen