windows-10-game-mode-teaserMit dem Windows 10 Creators Update veröffentlichte Microsoft den „Game Mode“. Es wird gemunkelt, dass der Modus Spiele generell schneller macht, ganz so einfach ist es natürlich nicht. Ich möchte kurz zusammenfassen, was der Modus bewirkt und was nicht.

Was macht der Game Mode?

Der Game Mode ist primär in der Lage, die zwei folgenden Punkte zu optimieren:

  • Die Verteilung/Priorität der CPU- und GPU-Ressourcen werden für das vordergründig laufende Spiel maximiert. Hintergrundanwendungen werden dadurch degradiert, aber bewusst nicht komplett geblockt.
  • CPU Kerne werden strikter aufgeteilt. Statt ein Spiel UND das System auf alle Kerne zu verteilen, bekommt das Spiel nicht alle aber dafür 100% dedizierte Kerne zugewiesen, das System bekommt die restlichen Kerne ebenfalls vollständig. Das Spiel sowie Prozesse des System sind somit separierter und unabhängiger.

via
Windows optimiert die Verarbeitung der Prozesse und Zuteilung von Ressourcen auf Softwareebene und priorisiert das Spiel. Die typischen Hintergrundprozesse (Antivirenscans, Sync-/Backup-/Datenprozesse, Video Encoding, Streaming usw.) werden mit weniger Ressourcen bedient und laufen damit langsamer.

Und das heißt jetzt?

Ein Szenario skizziert: Statt einem Spiel mit 4 weiteren Hintergrundprozessen jeweils 20% Ressourcen zuzuweisen, alles gleichmäßig auf 4 Prozessorkerne verteilt, bekommt das Spiel im Game Mode nun beispielsweise 80% und 3 volle Kerne, die 4 anderen Prozesse jeweils nur 5% auf dem vierten Kern. Heißt im Umkehrschluss, dass ein Spiel ohne Hintergrundprozesse auch bereits 100% Leistung bekommt und nicht von den Änderungen profitieren wird.
Somit ist der Game Mode vor allem dann geeignet, wenn viele oder größere Hintergrundprozesse das Spiel stören könnten und es unterschiedliche Lasten zu priorisieren gibt. Die positiven Auswirkungen zeigen sich dann durch wesentlich bessere minimale FPS, etwas bessere durchschnittliche oder maximale FPS und der Langzeitstabilität. Tests, die das gut zeigen, findet ihr beispielsweise auf hier auf pcworld.com (Ergebnisbilder folgend) oder rockpapershotgun.com. Folgend zwei Bilder von Ersterem Link, links ohne Hintergrundbelastung, rechts die Wirkung des Game Mode eines Systems mit Hintergrundlast:
windows-10-game-mode-pcworld.com-test-no-backgroundwindows-10-game-mode-pcworld.com-test-background-stuff

Heißt also einfach alle Programme offen lassen, Game Mode anschalten und alles schön? Ja und nein. Es stört vielleicht nicht weiter, wenn der wöchentliche Antivirenscan oder das wöchentliche Datenbackup auf die andere Festplatte doppelt so viel Zeit beanspruchen – die Tasks können nun beruhigt offen gelassen werden. Wichtige Programme könnten jedoch empfindlich gestört werden und ihre Arbeit nicht mehr wie benötigt verrichten, OBS Streaming als Beispiel genannt. Wählt eure laufenden Prozesse also weiterhin sorgfältig und testet auf Sideeffects bei kritischeren Programmen.
Leider gibt es noch keine Filterfunktionen, um einzelne Apps von der Optimierung auszuschließen, hier kann Microsoft sicher noch ausbessern.

Wie wird der Game Mode aktiviert?

Die meisten der Universal Windows Platform (UWP) und Win32 Spiele werden unterstützt, wobei es natürlicht immer Ausnahmen oder Probleme bei einzelnen Titeln geben kann. Bei unterstützten Titeln erscheint nach Drücken der Tastenkombination Win+G die Spieleleiste, in der ihr in den Einstellungen den Game Mode aktivieren könnt. Weitere Einstellungen bzw. die benötigte Tastenkombination (sollte Win+G nicht funktionieren) finden sich in den Windows Einstellungen -> Spiele.
windows-10-game-mode-bannerwindows-10-game-mode-options

Gruppenrichtlinien-Filterung

windows-ad-gpo-wmi-filter-intro-bannerDie Anweundung von Active Directory Gruppenrichtlinien lässt eine Filterung und Steuerung über verschiedene Techniken zu:

  • Verknüpfung mit OUs (die Voraussetzung ist gewissermaßen die erste Filterebene), Verknüpfungen aktivieren/deaktivieren
  • Sicherheitsfilterung mit Gruppen und Rechten
  • WMI-Filterung


Die ersten beiden sind gewissermaßen schon die Voraussetzung für das Erstellen und Anwenden einer Gruppenrichtlinie. Mit einer guten OU- und Gruppenstrukturen lassen sich bereits viele „Filter“ realisieren. Allerdings sind Rechte, Gruppen und OUs oftmals auch aufwändig in der Pflege.

Negativbeispiel: Mit einer „Windows10Clients“-Gruppe kann eine Filterung auf Sicherheitsebene vollzogen werden. Dazu muss die „Windows10Clients“-Gruppe jedoch händisch von den Admins gepflegt werden – neue Clients rein, alte Clients raus. Ebenso eine „SalesPCs“-Gruppe. In größeren Strukturen ist das nicht umsetzbar und geht auch einfacher.

Erweiterte Gruppenrichtlinienfilterung mit WMI

Hier kommen WMI-Filter ins Spiel. WMI, Windows Management Instrumentation, ist praktisch eine Schnittstelle zum Windows System, welches über Abfragen in einer Art SQL (WQL genannt) bedient wird und Informationen über das abgefragte System liefert. Solche Abfragen können ebenfalls für die Filterung von GPOs verwendet werden.

Beispiel: Wenn eine GPO nun also nur für Windows 10 Clients oder nur für Clients älter als Windows 10 übernommen werden soll, lassen sich die Clients super easy über WMI herausfiltern. Keine OU, keine Gruppen, nur 1 WMI-Objekt, im Endeffekt nur eine Zeile Code.

Mit Google oder Tools wie dem WMI Code Creator von Microsoft lassen sich somit schnell die benötigten Abfragen erstellen:
windows-ad-gpo-wmi-filter-code-creator-classes-processor-executewindows-ad-gpo-wmi-filter-code-creator-classes

Codebeispiele

Die Möglichkeiten sind vielseitig, hier ein paar Beispiele:

/* 32bit / 64bit */
SELECT * FROM Win32_OperatingSystem WHERE OSArchitecture = '32-Bit'
SELECT * FROM Win32_OperatingSystem WHERE OSArchitecture = '64-Bit'
/* Computername beginnt mit "vpc-" */
SELECT * FROM Win32_ComputerSystem WHERE Name LIKE 'vpc-%'
/* Sprache des Betriebssystems ist Deutsch */
SELECT * FROM Win32_OperatingSystem WHERE CountryCode = '49'
/* Internetexplorer ist in Version 8 installiert */
SELECT * FROM CIM_DataFile WHERE Filename = 'iexplore' AND version > '8.0' AND (path = '\\programme\\Internet Explorer\\' OR path = '\\program files\\Internet Explorer\\' )

via

Betriebssystemversion

Zum Erkennen des Betriebssystems eignen sich einige Variablen; von BuildNumber über Caption bis zu Version. Letztere ist einfach zu benutzen, da Microsoft für jede Betriebssystemversion plus dazu passende Servervariante die gleiche Version benutzt, weitere Infos dazu auf dieser Microsoft Seite.

/* Wählt alle Clients mit Windows Vista/7/8/8.1 (Nicht-Windows-10) */
SELECT * FROM Win32_OperatingSystem where Version like '6.%' and ProductType='1'
/* Windows 10 Clients only */
SELECT * FROM Win32_OperatingSystem where Version like '10.%' and ProductType='1'

Vorsicht: BuildNumber

Etwas nerviger ist die Abfrage der Windows Version anhand der BuildNumber, da diese nicht als Zahl sondern als String im System steht und somit einfache BuildNumber >= X Abfragen nicht funktionieren. Microsoft thematisiert das hier und wählt den Regex-ähnlichen Ansatz über die Anzahl der Ziffern in Kombination mit der BuildNumber. Auch Marc von gruppenrichtlinien.de verwendet WHERE BuildNumber > '5000' – das alles lief bei mir nicht zuverlässig. BuildNumber scheint mir ein schlechtes Werkzeug zu sein und ich gehe daher über die Betriebssystem Caption, die sehr standardisiert ist:

/* Windows 10 Clients */
SELECT * FROM Win32_OperatingSystem WHERE Caption LIKE '%10%' AND BuildNumber LIKE '[123456789][0123456789][0123456789][0123456789][0123456789]'
/* Alle Clients vor Windows 10 */
SELECT * FROM Win32_OperatingSystem WHERE NOT Caption LIKE '%10%' AND BuildNumber LIKE '[123456789][0123456789][0123456789][0123456789]'

Das hat bei Win7 und Win10 funktioniert wie erwünscht.
windows-ad-gpo-wmi-filter-in-use-os-version-buildnumber

Was? Warum?

Ich hatte letztens das Problem an einem Windows 10 Client, das nach einem Feature Update (auf 1709 glaube ich) plötzlich die Sprache des Betriebssystems auf Englisch war. Jedoch nur die Anzeigesprache, Tastaturlayout, Datum & Uhrzeit sowie Regionale Einstellungen waren alle noch auf Deutsch. Deutsch war als primäre Sprache noch eingestellt, aber ein zugehöriges Sprachpaket für die Anzeigensprache war nicht mehr verfügbar:
windows-10-anzeigesprache-manuell-installieren-language-pack-display-settings1windows-10-anzeigesprache-manuell-installieren-language-pack-display-settings2

Und obwohl auf etlichen Microsoft Seiten steht, dass man über diese Einstellungsdialoge einfach Sprachen mitsam Anzeigepaket herunterladen kann, funktioniert das in diesem Zustand nicht mehr. Auch das Löschen und erneute Einstellen der Deutschen Sprache bringt die Anzeigesprache nicht zurück.

Anzeigesprache mit .cab Sprachpaket installieren

So seltsam der Fehler auch ist, so selten wird er vermutlich sein. Aber dennoch, hier die Lösung:
Im Internet findet man nach einer kurzen Suche Sprachpakete als .cab Downloads, zum Beispiel bei Tobias Hartmann. Diese .cab Dateien könnt ihr dann manuell installieren in: Start -> Ausführen -> lpksetup – der Vorgang wird einige Minuten brauchen:
windows-10-anzeigesprache-manuell-installieren-language-pack-display-install1windows-10-anzeigesprache-manuell-installieren-language-pack-display-install2

Anschließend müsste bei der installierten Sprache auch wieder die Anzeigesprache in den Regionaleinstellungen angezeigt werden und nach einem kurzen Relogin ist das Betriebssystem auch schon auf die neue Sprache eingestellt.
windows-10-anzeigesprache-manuell-installieren-language-pack-display-install-complete

Microsoft, das geht doch bestimmt auch einfacher.

Skript als Admin via Kontextmenü

Powershell Skripte haben in der Handhabung einen kleinen Nachteil gegenüber Batch-Skripten: Sie lassen sich nicht einfach über das (Rechtsklick-)Kontextmenü als Administrator starten.
powershell-skripte-run-as-admin-standard-before

Kontextmenüeintrag für ein bestimmtes Skript

Erstellt von der Skriptdatei eine Verknüpfung via Rechtsklick -> Senden an -> Desktop und öffnet die Eigenschaften dieser Verknüpfung. Unter Ziel wird der Pfad zur .ps1 Datei angegeben. Verändert das Ziel folgendermaßen:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -NoExit "[Pfad]"

Optional kann über „Anderes Symbol…“ -> C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -> das Powershell-Icon mit UAC-Icon eingestellt werden. Somit ist die Verknüpfung visuell als eine Admin-fähige Verküpfung gekennzeichnet:
powershell-skripte-run-as-admin-shortcut-after-context-menu

Kontextmenüeintrag für jedes Skript

Noch besser: Der Kontextmenü-Eintrag „Als Administrator ausführen“ bei jeder Powershell-Datei, ohne Verknüpfung. Hierzu müssen in der Registry Änderungen gemacht werden, die sich am einfachsten über Batch Skripte ausführen lassen:

Kontextmenüeintrag hinzufügen:

:: Add value for UAC shield icon:
REG ADD "HKCR\Microsoft.PowerShellScript.1\Shell\runas" /v HasLUAShield /t REG_SZ /d "" /f
:: Add value to create context menu item:
REG ADD "HKCR\Microsoft.PowerShellScript.1\Shell\runas\command" /ve /t REG_EXPAND_SZ /d "\"%%SYSTEMROOT%%\System32\WindowsPowerShell\v1.0\powershell.exe\" -executionpolicy bypass -nologo -file \"%%1\"" /f

(Hinweise: Der Code MUSS mit Adminrechten in der CMD ausgeführt werden – entweder von Hand oder in einem .bat Skript zwischenlagern.)
powershell-skripte-run-as-admin-regedit-batch-commands
powershell-skripte-run-as-admin-regedit-after-context-menu

Kontextmenüeintrag wieder entfernen:

REG DELETE "HKCR\Microsoft.PowerShellScript.1\Shell\runas" /f

via

Windows Updates suchen ewig

Wenn Windows 7 für eine Weile keine neuen Windows Updates bekommen hat und diese später nachholen soll, kann es sein, dass sich das System zu Tode lädt. Es wird ewig gesucht und nichts gefunden. Vielleicht waren die Windows Updates längere Zeit deaktiviert oder es handelt sich um ein älteres Image.
Windows 7 verwendet eine Technologie zum Erkennen von installierten und noch benötigten Updates, welche über die Jahre mehr und mehr überfordert ist mit der Menge an Informationen. Hier braucht Windows 7 Unterstützung durch 2 Patches und im Notfall weiteren Fixes, damit die Updates wieder schnell gefunden und installiert werden.

Update: Neuer Fix von Winfuture

Winfuture hat für genau dieses Fehlverhalten mittlerweile einen eigenen Fix veröffentlicht, welcher ein Set aus 5 Updates installiert, unter anderem auch die unten erwähnten. Vor der Installation dieses Pakets muss der Windows Update Dienst beendet (net stop wuauserv) oder Windows Updates deaktiviert werden.
Link zum Winfuture Windows 7 Update Fix

Fix

Hauptsächlich helfen die Updates 3020369 und 3172605 in diesem Fall. Sollten die Updates nicht einfach per Doppelklick installiert werden können, probiert vorher den Windows Update Dienst zu beenden, hier die CMD Befehle:

net stop wuauserv
:: KB3020369 installieren
:: Neustart
net stop wuauserv
:: KB3172605 installieren
:: Neustart

Damit sollten die Updates wieder laufen. Ich verwende diese Methode bereits seit Langem auf Arbeit um alte Windows 7 Systeme wieder schnell an das Windows Update anzubinden.

Problem nicht gelöst?

Falls es Probleme gibt, ist eventuell Windows Update an sich beschädigt. Möglicherweise hilft das Update KB3102810, die Neuinstallation des Windows Update Agents (unter „Manuelles Herunterladen des Windows Update-Agents“, Version 7.6 für Windows 7) oder das pcw-Fix Windows Update.
Weitere Windows Update Fehler habe ich hier im Blog – die Suchfunktion hilft.

via

Sicher entfernen

Jeder weiß es aber nur die Wenigsten tun es: Hardware (vor allem USB-Speichermedien) sicher entfernen vorm Abziehen. Es sind noch teilweise Relikte aus alten Zeiten (wie das Defragmentieren), dass USB-Speichermedien sicher entfernt werden müssen. Das lag unter anderem am aktivierten Schreibcache, durch den Schreibvorgänge erst durch den RAM in den USB-Stick gingen. Durch das Abziehen oder Stromverlust entstanden hier korrupte Daten. Seit Windows 8 (oder Win10, unsicher) ist dieser Schreibcache standardmäßig deaktiviert. Trotzem kann der USB-Stick durch plötzlichen Stromverlust beschädigt werden.

Nun ist es aber manchmal gar nicht so einfach – das Gerät will sich einfach nicht entfernen lassen! Egal wie oft man das „Hardware sicher entfernen“ Menü benutzt und selbst wenn alle Programme geschlossen sind. Klar, Herunterfahren würde reichen, aber es geht auch noch anders.
externe-datentraeger-sicher-entfernen-windows-feature-failure

Entfernen erzwingen

Über die Windows Kommandozeile, genauer gesagt mit dem Tool Diskpart, lassen sich Medien sehr zuverlässig entfernen. Zuerst wird das Volume ausgewählt und dann mit remove all dismount ausgeworfen.
Hier eine beispielhafte Befehlsabfolge:

diskpart
list volumes
select volume 6
remove all dismount

externe-datentraeger-sicher-entfernen-windows-diskpart-success

Kleine Tools wie RemoveDrive können diesen Prozess noch flexibler und mächtiger gestalten und dienen der Automation.
via

Info

Relativ einfache Anforderung: Es sollen Registry Keys nach bestimmten Inhalten durchsucht und diese dann herausgefiltert werden. Gesucht wird sowohl in den Attributbezeichnern als auch in den Werten, Achtung an dieser Stelle, dass nicht zu viel gelöscht wird.
Kurzes Beispiel:
registry-filtern-mit-batch-beispiel
Das Skript könnte mit dem Filter „Memento“ die ersten fünf Einträge herauslöschen. Mit „Version“ oder „Client“ würde jeweils ein Eintrag gelöscht werden. Somit ist das Skript wie ein Regex-ähnlicher Filter zum Löschen von Registry-Einträgen zu sehen.
Außerdem habe ich das Skript in zwei verschiedenen Varianten programmiert: Variante 1 ist einfach und arbeitet 1 Filteranfrage ab. Variante 2 verbaut den Code in einer Funktion und kann beliebig oft mit unterschiedlichen Filterparametern aufgerufen werden. Beide Skript sind durch möglichst viele Variablen gut anpassbar für den schnellen Einsatz.
Weiterlesen