Anzeige

Am Puls von Microsoft

Anzeige

Frage: Wie automatisches Treiber-Update für Grafikkarte unterbinden?

DM-moinmoin

gehört zum Inventar
Schon komisch. Seit ich Win 10 installiert hab, hab ich noch nicht einen Treiber über WU angeboten bekommen.
Hab erst einmal einen Nvidia Graka Treiber manuell installiert und das ist schon ne Weile her.
 
Anzeige

flinki

kennt sich schon aus
Tja dann sei froh.
Aber noch sind die Treiber nicht installiert, stehen nur erst in der Übersicht, sonst ging das schneller. Etwas Hoffnung bleibt also noch.

Gruß, flinki
 

[email protected]

gehört zum Inventar
Hallo flinki,

eines der Updateprobleme bei Windows 10 ist, dass alle Windows- bzw. Microsoft-Updates wohl unkategorisiert (wichtige, empfohlene und optionale Updates, Systemtreiber usw.) im agressiven Pushverfahren bereit gestellt werden (siehe auch c't 23/2015, Seite 90 ff.) Normale Systemeinstellungen, klassische Tricks und Registry-Tweaks versagen hier reihenweise.

Eine Steuerung der Windows 10-Updates kann dennoch mit 2 PowerShell-Funktionen in einem PowerShell-Script relativ einfach realisiert werden. Konfigurationsänderungen an den Windows-Update-Einstellungen oder Registy-Eingriffe sind hierfür grundsätzlich nicht notwendig.

Die PowerShell-Funktionen "Get-WindowsUpdate" und "Set-WindowsHiddenUpdate" aus der Internetseite "PowerShell Magazine » How to view and restore hidden Windows Updates with PowerShell)" (Posted by Emin Atac on March 19, 2014) werden in eine neue Textdatei kopiert und deren Dateierweiterung ".txt" durch ".ps1" ersetzt (Windows10_Update.ps1). An das Ende dieses PowerShell-Scriptes werden die entsprechenden Befehlsaufrufe eingetragen (Windows 10, deutsche Version):

# Alle Windows-Updates werden ausgeblendet
Get-WindowsUpdate | Set-WindowsHiddenUpdate -Hide:$true
# Windows-Updates für den Windows Defender werden aktiviert
Get-WindowsUpdate | Where { $_.Title -match 'Definitionsupdate'} | Set-WindowsHiddenUpdate -Hide:$false
# Alle Windows-Sicherheitsupdates werden aktiviert
Get-WindowsUpdate | Where { $_.Title -match 'Sicherheitsupdate'} | Set-WindowsHiddenUpdate -Hide:$false

Der manuelle Start des PowerShell-Scriptes "Windows10_Update.ps1" erfolgt mit Administratorrechten über eine Batchdatei im gleichen Ordner (Windows10_Update.cmd) mit dem folgendem Inhalt:

@"%PSModulePath%..\powershell.exe" -ExecutionPolicy Unrestricted -File "%~dp0Windows10_Update.ps1" -NoProfile -NoLogo -Mta

Die automatische und unbeaufsichtigte Steuerung übernimmt die Windows-Aufgabenplanung:

Allgemein/Sicherheitsoptionen:
Benutzer: NT-AUTORITÄT\SYSTEM
[X] Mit höchsten Privilegien ausführen

Trigger:
Start nach Zeitplan: Täglich 00:00 Uhr
Wiederholung: 15 Minuten
Dauer: 1 Tag

Aktionen:
Programm starten: <Pfad>\Windows10_Update.cmd

Die manuelle Freigabe der verbleibenden ausgeblendeten Updates erfolgt bei Bedarf mit dem Microsoft Problembehandlungspaket "wushowhide.diagcab" aus KB3073930 (https://support.microsoft.com/de-de/kb/3073930).

[email protected]
 

flinki

kennt sich schon aus
Danke für den ausführlichen Beitrag, aber das ist für mich zu kompliziert, zumindest verstehe ich nicht was genau ich nun machen soll:confused:

Gruß, flinki
 

morpheus22

Herzlich willkommen

Die PowerShell-Funktionen "Get-WindowsUpdate" und "Set-WindowsHiddenUpdate" aus der Internetseite "PowerShell Magazine » How to view and restore hidden Windows Updates with PowerShell)" (Posted by Emin Atac on March 19, 2014) werden in eine neue Textdatei kopiert und deren Dateierweiterung ".txt" durch ".ps1" ersetzt (Windows10_Update.ps1). An das Ende dieses PowerShell-Scriptes werden die entsprechenden Befehlsaufrufe eingetragen (Windows 10, deutsche Version):

# Alle Windows-Updates werden ausgeblendet
Get-WindowsUpdate | Set-WindowsHiddenUpdate -Hide:$true
# Windows-Updates für den Windows Defender werden aktiviert
Get-WindowsUpdate | Where { $_.Title -match 'Definitionsupdate'} | Set-WindowsHiddenUpdate -Hide:$false
# Alle Windows-Sicherheitsupdates werden aktiviert
Get-WindowsUpdate | Where { $_.Title -match 'Sicherheitsupdate'} | Set-WindowsHiddenUpdate -Hide:$false

Der manuelle Start des PowerShell-Scriptes "Windows10_Update.ps1" erfolgt mit Administratorrechten über eine Batchdatei im gleichen Ordner (Windows10_Update.cmd) mit dem folgendem Inhalt:

@"%PSModulePath%..\powershell.exe" -ExecutionPolicy Unrestricted -File "%~dp0Windows10_Update.ps1" -NoProfile -NoLogo -Mta

Die automatische und unbeaufsichtigte Steuerung übernimmt die Windows-Aufgabenplanung:

Allgemein/Sicherheitsoptionen:
Benutzer: NT-AUTORITÄT\SYSTEM
[X] Mit höchsten Privilegien ausführen

Trigger:
Start nach Zeitplan: Täglich 00:00 Uhr
Wiederholung: 15 Minuten
Dauer: 1 Tag

Aktionen:
Programm starten: <Pfad>\Windows10_Update.cmd

Die manuelle Freigabe der verbleibenden ausgeblendeten Updates erfolgt bei Bedarf mit dem Microsoft Problembehandlungspaket "wushowhide.diagcab" aus KB3073930 (https://support.microsoft.com/de-de/kb/3073930).

[email protected]
Wenn ich das richtig verstehe, dann werden durch den Script nur Sicherheitsupdates und Defender durchgelassen und keine Treiber? Meine Freundin hat ein HP Probook 4530s mit 2 Grafikkarten also Intel für Office und für Spiele o.ä. eine AMD 6490M. Jedes Mal, wenn Windows "meint"den aktuellen AMD Treiber installieren zu müssen, dauert der Windowsstart fast ne Minute und auch aus dem Energiesparmodus dauert es auch sehr lange bis man auch dem Desktop ist. Um das zu verhindert habe ich von lashcatlabs.net die speziellen Treiber für switchable Graphics installiert. Damit läuft es sauber und schnell.
 

[email protected]

gehört zum Inventar
Hallo morpheus22,

genau so soll(te) es automatisch funktionieren; teilweise habe ich aber dennoch festgestellt, dass Windows-Treiberupdates nicht auf das Flag "Hidden" reagieren und nicht auf versteckt gesetzt werden. Man kann das aber auch manuell durchführen bzw. kontrollieren. Hier die "Zutaten":

- von der Internetseite "https://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc" das Installationspaket "Windows Update PowerShell Module" (https://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc/file/41459/43/PSWindowsUpdate.zip) herunter laden und in einen beliebigen Ordner (z. B. "Windows Update") in das Unterverzeichnis "PSWindowsUpdate" entpacken.
- im Ordner "Windows Update" 2 Textdateien erstellen (Dateierweiterungen ändern)
a) WindowsUpdate.ps1
Import-Module PSWindowsUpdate
Get-WUList
Read-Host 'Press any key to continue...' | Out-Null
Hide-WUUpdate
Read-Host 'Press any key to continue...' | Out-Null

b) WindowsUpdate.cmd
@ECHO OFF
IF NOT EXIST "%PSModulePath%PSWindowsUpdate\Get-WUInstall.ps1" IF EXIST "%~dp0PSWindowsUpdate\*.*" "%windir%\System32\xcopy.exe" /S /E /R /Y "%~dp0PSWindowsUpdate\*.*" "%PSModulePath%PSWindowsUpdate\*.*" > NUL
"%PSModulePath%..\powershell.exe" -ExecutionPolicy Unrestricted -File "%~dp0WindowsUpdate.ps1" -NoProfile -NoLogo -Mta
EXIT

- "WindowsUpdate.cmd" mit Administratorrechten ausführen

Der Status der Updates wird im ersten Schritt angezeigt und kann im zweiten Schritt manuell gesetzt werden.

[email protected]
 

[email protected]

gehört zum Inventar
Hallo flinki & morpheus22,

ich habe noch einmal meinen Post #24 überarbeitet, getestet und das gesamte PowerShell-Script so angepasst, so dass nun auch bei den Gerätetreiberupdates automatisch das Flag "Hidden" gesetzt wird, sofern die Funktionsaufrufe am Scriptende dieses nicht einschränken. Die Änderungen bei der Aufgabenplanung stellen sicher, dass das PowerShell-Script der Windows Update-Funktion "zuvor kommt". In der Protokolldatei "%windir%\SoftwareDistribution\ReportingEvents.log" wird dann alles von Windows 10 dokumentiert.

1. Windows10_Update.ps1

Function Get-WindowsUpdate {

[Cmdletbinding()]
Param()

Process {
try {
Write-Verbose "Getting Windows Update"
$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$Criteria = "IsInstalled=0 and DeploymentAction='Installation' or IsPresent=1 and DeploymentAction='Uninstallation' or IsInstalled=1 and DeploymentAction='Installation' and RebootRequired=1 or IsInstalled=0 and DeploymentAction='Uninstallation' and RebootRequired=1"
$SearchResult = $Searcher.Search($Criteria)
$SearchResult.Updates
} catch {
Write-Warning -Message "Failed to query Windows Update because $($_.Exception.Message)"
}
}
}

Function Set-WindowsHiddenUpdate {

[Cmdletbinding()]

Param(
[Parameter(ValueFromPipeline=$true,Mandatory=$true)]
[System.__ComObject[]]$Update,

[Parameter(Mandatory=$true)]
[boolean]$Hide
)

Process {
$Update | ForEach-Object -Process {
if ((($_.pstypenames)[0] -eq 'System.__ComObject#{c1c2f21a-d2f4-4902-b5c6-8a081c19a890}') -or (($_.pstypenames)[0] -eq 'System.__ComObject#{70cf5c82-8642-42bb-9dbc-0cfd263c6c4f}') -or (($_.pstypenames)[0] -eq 'System.__ComObject#{918efd1e-b5d8-4c90-8540-aeb9bdc56f9d}')) {
try {
$_.isHidden = $Hide
Write-Verbose -Message "Dealing with update $($_.Title)"
} catch {
Write-Warning -Message "Failed to perform action because $($_.Exception.Message)"
}
} else {
Write-Warning -Message "Ignoring object submitted"
}
}
}
}

Get-WindowsUpdate | Set-WindowsHiddenUpdate -Hide:$true
Get-WindowsUpdate | Where { $_.Title -match 'Definitionsupdate' } | Set-WindowsHiddenUpdate -Hide:$false
Get-WindowsUpdate | Where { $_.Title -match 'Sicherheitsupdate' } | Set-WindowsHiddenUpdate -Hide:$false

2. Windows10_Update.cmd

@"%PSModulePath%..\powershell.exe" -ExecutionPolicy Unrestricted -File "%~dp0Windows10_Update.ps1" -NoProfile -NoLogo -Mta

3. Windows-Aufgabenplanung (Hide Windows Updates)

Allgemein/Sicherheitsoptionen:
Benutzer: NT-AUTORITÄT\SYSTEM
[X] Mit höchsten Privilegien ausführen

Trigger:
Start nach Zeitplan: Beim Start
Wiederholen jede: 15 Minuten
Für die Dauer von: Sofort

Aktionen:
Programm starten: <Pfad>\Windows10_Update.cmd

Bedingungen:
Energie
[ ] Beenden, wenn der Computer in den Akkubetrieb wechselt

Die manuelle Freigabe der verbleibenden ausgeblendeten Updates erfolgt bei Bedarf mit dem Microsoft Problembehandlungspaket "wushowhide.diagcab" aus KB3073930 (https://support.microsoft.com/de-de/kb/3073930).

[email protected]
 

Samuel677

Herzlich willkommen
Hallo zusammen,

ich habe das gleiche Problem: Selbst bei deaktivierter automatischer Treiberinstallation (Geräteinstallationseinstellungen) werden nach einem frisch installierten (CleanInstall) Win 10 Home immer wieder sämtliche Treiber für NVidia-Karte, Netzwerkadapter, TouchPad, FreefallSensor etc. gelistet und direkt installiert. Ich finde es schon enormst krass, wie sehr Microsoft alles automatisiert und man als etwas mehr wissender User (oder Admin) hier absolut machtlos ist und rein gar nichts mehr ohne die wildesten Umwege konfigurieren kann. Für die klassischen DAUs mag das sinnvoll sein, nicht aber für jene, die sich besser auskennen.

Weiß jemand, ob sich die Treiberupdates über die Gruppenrichtlinien in der Pro-Version definitiv deaktivieren lassen, evtl. weil GPOs einen höheren Stellenwert besitzen? Oder hat man dann auch wieder das Problem, dass die MS-seitige Klassifizierung eines "Updates" diese Richtlinie umgeht, wenn ein Treiberupdate eben fälschlicherweise als "wichtiges Update" o.ä. daherkommt?

Danke und Gruß
 

Atwood

gehört zum Inventar
Auch auf Pro installiert Windows 10 Treiber trotz deaktivierter Treiber Installation.

Du kannst es bei Pro aber umgehen in dem du Upgrades zurückstellen machst was dann für 3 Monate zählt und führst dann Windows HideandShow Tool aus jedes mal bevor du Windows Update ausführst so mache ich das seit kurzem und es funktioniert wunderbar und kein Crap wird installiert.
 

Samuel677

Herzlich willkommen
Atwood, das klingt auch machbar.

Noch eine Frage zu der Powershell-Sache: Irgendwie finde ich es seltsam, dieses Script dann alle 15 Minuten ausführen zu lassen, damit es einem eventuellen automatischen Update zuvorkommt. Könnte ich es nicht auch so machen, dass ich den Update-Dienst erstmal komplett deaktiviere und ihn dann von Zeit zu Zeit manuelle starte - und davor dann jeweils das Script ausführe? Das müsste mit NET START/STOP und SC ja machbar sein ...
 

[email protected]

gehört zum Inventar
Hallo Samuel677,

alle nicht geblockten Windows-Updates (hier: Windows Defender Definitionsupdates und Sicherheitsupdates) und Windows-App-Updates soll(t)en zeitnah installiert werden. Windows 10 steuert das durch mehrere Standard-Tasks in der Windows Aufgabenplanung (\Microsoft\Windows\UpdateOrchestrator und \Microsoft\Windows\WindowsUpdate), deren Auslösung wiederum durch mehrere Trigger aktiviert wird. Ein manuelles Starten (und Beenden) des Windows Update-Dienstes (%windir%\system32\sc.exe stop wuauserv) und aller nachrangigen Dienste (Kryptografiedienste, Intelligenter Hintergrundübertragungsdienst) ist eben dann doch etwas komplexer und muss die Erwartungen an ein gesichertes Updateverfahren für alle Bedingungen (Sicherheitsupdates, wichtige, empfohlene, optionale Updates, Office- und App-Updates) erfüllen und ein stabiles System (dauerhaft) gewährleisten.

Was da intern durch Updateprozesse so läuft, sieht man hier ganz gut: %windir%\SoftwareDistribution\ReportingEvents.log

[email protected]
 
Anzeige
Oben