Bestimmte Windows Updates blockieren
Hallo Gemeinde,
weiß einer wo Windows die ausgeblendeten Updates abspeichert (im Falle bei Win7 z. B.)?
Mit "RegFromApp" und "Regshot (v.1.9) ist es mir leider nicht gelungen es zu verfolgen.
(Der Hintergrund ist per Batch bestimmte Updates zu blockieren).
Gruß
Evinben
weiß einer wo Windows die ausgeblendeten Updates abspeichert (im Falle bei Win7 z. B.)?
Mit "RegFromApp" und "Regshot (v.1.9) ist es mir leider nicht gelungen es zu verfolgen.
(Der Hintergrund ist per Batch bestimmte Updates zu blockieren).
Gruß
Evinben
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 304355
Url: https://administrator.de/contentid/304355
Ausgedruckt am: 24.11.2024 um 12:11 Uhr
15 Kommentare
Neuester Kommentar
Hallo enviben,
Updates kannst du komfortabler per Powershell ausblenden. Windows bietet dafür auch ein Tool an um diese dauerhaft auszublenden (Das Tool ist zwar für Windows 10, aber die unten stehenden Code-Schnippsel funktionieren genauso auch unter Windows 7 und 8):
https://support.microsoft.com/en-us/kb/3073930
Wenn du dieses herunter lädst und die Dateiendung auf *.cab änderst und z.B. mit WinRAR öffnest findest du darin ein paar Powershell-Schnippsel mit denen sich Updates auf einfache Weises ausblenden lassen.
Das lässt sich auch direkt per Batch einbinden wenn man das möchte:
Zum Ausblenden eines Updates
Wurde auch schon hier besprochen:
Windows Update per .cmd oder .ps1 ausblenden
Mit dem UpdateSearcher-Objekt lässt sich natürlich auch abfragen welche Updates ausgeblendet und nicht installiert wurden, wenn man das benötigt.
PS-Code
Grüße Uwe
Updates kannst du komfortabler per Powershell ausblenden. Windows bietet dafür auch ein Tool an um diese dauerhaft auszublenden (Das Tool ist zwar für Windows 10, aber die unten stehenden Code-Schnippsel funktionieren genauso auch unter Windows 7 und 8):
https://support.microsoft.com/en-us/kb/3073930
Wenn du dieses herunter lädst und die Dateiendung auf *.cab änderst und z.B. mit WinRAR öffnest findest du darin ein paar Powershell-Schnippsel mit denen sich Updates auf einfache Weises ausblenden lassen.
Das lässt sich auch direkt per Batch einbinden wenn man das möchte:
Zum Ausblenden eines Updates
powershell.exe -ExecutionPolicy ByPass -Command "&{((New-Object -Com 'Microsoft.Update.Session').CreateUpdateSearcher()).Search(\"IsInstalled=0 and Type='Software'\").Updates | %%{If($_.Title -like '*KB3035583*'){write-host \"Hiding Update $($_.Title)\";$_.IsHidden = $true}}}"
Windows Update per .cmd oder .ps1 ausblenden
Mit dem UpdateSearcher-Objekt lässt sich natürlich auch abfragen welche Updates ausgeblendet und nicht installiert wurden, wenn man das benötigt.
PS-Code
((new-object -ComObject "Microsoft.Update.Session").CreateUpdateSearcher()).Search("IsInstalled=0 and IsHidden=1").Updates | select Title,IsHidden
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
Beim Ausführen deines Codes
Hallo NIK,kein Wunder wenn du den ersten Code in ein Powershell-Skript rein kopierst, diese Zeile war für das direkte ausführen in einer Batchdatei gedacht , sieht man doch an dem vorspann powershell.exe -Executionpolicy ........
Für eine Liste an KBs, kannst du das ganz einfach ergänzen und die IDs aus einer Textdatei lesen (ohne KB prefix):
123456
444444
555555
$ids = gc 'C:\liste.txt'
((new-object -ComObject "Microsoft.Update.Session").CreateUpdateSearcher()).Search("Type='Software' and IsInstalled=0").Updates | ?{$_.KBArticleIDs -in $ids} | %{$_.IsHidden = $true}
Grüße Uwe
Zitat von @evinben:
OK Uwe,
Allerdings ist hier aufzupassen etwas mehr Geduld aufzubringen und die Verarbeitung nicht vorzeitig zu beenden, da es relativ lang dauert, so um die ca. 30 Sekunden (mit einem einzigen KB-Eintrag erstmals versucht).
Das ist normal, da Windows hier erst mal online und das System nach installerten Updates scannt und das dauert halt seine Zeit.OK Uwe,
Allerdings ist hier aufzupassen etwas mehr Geduld aufzubringen und die Verarbeitung nicht vorzeitig zu beenden, da es relativ lang dauert, so um die ca. 30 Sekunden (mit einem einzigen KB-Eintrag erstmals versucht).
Folgende Fehlermeldung wird jeweils generiert (in der txt-Datei ist erstmals nur 2952664 eingetragen) :
##red|
Sie müssen auf der rechten Seite des Operators "-" einen Wertausdruck angeben.
Den Operator -in gibt es erst ab Powershell 3.0, und du darfst da kein Leerzeichen zwischen dem Strich und dem in machen.##red|
Sie müssen auf der rechten Seite des Operators "-" einen Wertausdruck angeben.
KBs einzeln aus der Textdatei einzulesen war vor allem aus diesem Grund gemeint, um da übersichtlich Notizen zu den einzelnen KBs eintragen zu können.
Können in der Textdatei Notizen (z. B. mit einem vorangestellten ' | ; | : oder mit # wie in einem PowerShell-Skript) berücksichtigt werden?
$ids = gc 'c:\liste.txt' | ?{$_ -notlike '#*'}
Grüße Uwe
Zitat von @evinben:
Laut dem Verzeichnis "C:\Windows\system32\WindowsPowerShell\v1.0" ist hier bei mir die v.1.0.
(Dateiversion von PowerShell ISE.exe: 6.1.7600.16385).
Nein, so kannst du die Powershell-Version nicht bestimmen Laut dem Verzeichnis "C:\Windows\system32\WindowsPowerShell\v1.0" ist hier bei mir die v.1.0.
(Dateiversion von PowerShell ISE.exe: 6.1.7600.16385).
Dazu gebe folgendes in eine PS Konsole ein
$PSVersiontable
Was ist denn dann hier faul?
zu 99,9% eine zu alte Powershell 2.0 die den -IN Operator einfach noch nicht kennt, Windows 7 wird damit ja ausgeliefert, wenn du also kein Update des Management Frameworks durchgeführt hast bist du noch auf 2.0. Ich kanns dir aber auch für PS 2.0 umschreiben wennst willst PS 2.0 kompatible Variante
$ids = gc 'c:\liste.txt' | ?{$_ -notlike '#*'}
((new-object -ComObject "Microsoft.Update.Session").CreateUpdateSearcher()).Search("Type='Software' and IsInstalled=0").Updates | ?{$_.KBArticleIDs -match ($ids -join '|')} | %{$_.IsHidden = $true}
PSVersion 2.0
Wie vermutet.Dies überrascht mich aber nun sehr, dass das System bei mir keine Updates (etwa des Management Frameworks) durchgeführt hat, obwohl alle wichtigen Updates gezogen werden.
Nö, das Management Framework wird nicht durch Windows Updates auf eine neue Version gezogen, das muss man immer manuell installieren!! Genau so wie das NET-Framework sich nicht selber von Version 2 auf 4 updated, da musst du genauso Hand anlegen ...
Das liegt aber definitiv nicht am Skript,.
Du startest das Skript aber schon "elevated" ? Das ist zwingend Voraussetzung, dieser Fehler kommt nämlich wenn das Skript bzw. die Konsole nicht elevated gestartet wurde!
Ansonsten liegt es dann an deiner Maschine:
https://www.google.de/search?q=0x80240044
Du startest das Skript aber schon "elevated" ? Das ist zwingend Voraussetzung, dieser Fehler kommt nämlich wenn das Skript bzw. die Konsole nicht elevated gestartet wurde!
Ansonsten liegt es dann an deiner Maschine:
https://www.google.de/search?q=0x80240044
Zitat von @evinben:
Nun habe ich eine "RunAsAdmin"-Möglichkeit auch über .ps1-Dateien. Und es funktioniert auch "elevated" !
Ja ja die Powershell Anfänger , Danke für deine Mühe die hätte ich dir auch abnehmen können , aber egal so lernt man wenigstens was wenn man es sich selber erarbeitet.Nun habe ich eine "RunAsAdmin"-Möglichkeit auch über .ps1-Dateien. Und es funktioniert auch "elevated" !
Wäre es so OK oder hättest du da bessere Lösungen bzw. wie sollte es eigentlich offiziell mit "elevated rights" gemacht werden und wie würdest du es machen?
Über den Taskplaner z.B. oder man lässt das Script selber überprüfen ob es elevated gestartet wurde oder nicht, dann startet es sich im Fall der Fälle selber nochmal elevated, habe ich hier im Forum schon mal in folgendem Thread gezeigt:Powershell Script mit Benutzerabfrage
p.s. Deine Kontextmenü-Variante läuft z.B. auf einem Windows 10 nicht, ich mache das für den Kontextmenüeintrag immer so
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\RunAsAdmin]
@="Run As Admin"
"HasLuaShield"=""
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\RunAsAdmin\command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -Executionpolicy ByPass -Command \"start powershell -Verb runas -ArgumentList \\\"-File `\\\"%1`\\\"\\\"\""