Computer kann das Gerät ausschalten um Energie zu sparen - Netzwerkkarte

Autor: Mark Heitbrink - vom 26.11.2015 - Kategorie(n): Anleitungen

Computer kann das Gerät ausschalten um Energie zu sparen - Netzwerkkarte



Der Artikel war eigentlich schon lange fällig.

Jeder sucht nach der Lösung die Checkbox per Gruppenrichtlinie zu steuern und an allen Stellen findet man als Antwort: Geht nicht, musst du scripten.

Warum ist das über die Gruppenrichtlinien nicht möglich?. Der Fehler liegt in einem winzigen Detail:
Es geht um den Registry Eintrag "PnPCapabilities" der unterhalb dieses Schlüssels 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\DeviceNumber liegt. Der Eintrag muss auf "PnPCapabilities"=dword:00000018 (dezimal 24) zum Deaktivieren umgestellt werden. 

Siehe:
Information about power management setting on a network adapter
https://support.microsoft.com/en-us/kb/2740020 

How to disable power management for a network adapter when you deploy Windows XP 
https://support.microsoft.com/en-us/kb/837058

Die DeviceNumber unterscheidet sich an jedem System. Somit ist eine direkte Adressierung des Werts und das Setzen, z.B.: über die GPP Registry nicht so leicht möglich, wenn man nicht auf Verdacht "20" DeviceNumber Einträge generieren möchte.

Die Lösung:
Wir suchen in der Registry nach Physikalischen Netzwerkkarten (Bustype als Eintrag existiert) und löschen den Wert "PnPCapabilities" wenn er vorhanden ist und setzen ihn erneut als Reg_Dword. Dieser Umweg: erst löschen, dann erstellen ist dem doofen Verhalten von Set-ItemProperty zu verdanken :-(

Das können wir jetzt batch-en, vb-en oder powershell-en. Beachtet bei Powershell Scripten unbedingt die "set-executionpolicy". Wenn ihr das Powershell Script in eine CMD verpackt, startet es mit powershell.exe -ExecutionPolicy Bypass -command "\\pfad\ordner\script.ps1", um Fehler der ExecutionPolicy zu umgehen:

Powershell Script - DisablePowermanagement.ps1
# Der PnPCapabilities Eintrag ist nicht immer vorhanden, und  # "Set-ItemProperty" schreibt neue Werte immer als SZ, wir brauchen aber ein DWORD# "New-ItemProperty" kann das, aber das kann keine Werte überschreiben.# ?WTF?
# Hässliche Lösung: Erst alle Einträge löschen, dann neu setzen. Das Script hat
# sicherlich Verbesserungspotential, aber jetzt mag ich nicht mehr und nehme# Schönheitsoperationen gerne entgegen :-)# - BusType könnte auf "5" eingeschränkt werden# - if not exist -> new-item else delete and new-item wäre auch schick
$NICs=Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}' -recurse | where property -eq BusType
Get-ItemProperty $NICS.pspath| Remove-ItemProperty -name PnPCapabilities
Get-ItemProperty $NICS.pspath| New-ItemProperty -name PnPCapabilities -value '24' -PropertyType 'Dword' 



  


Das könnt ihr jetzt über ein Computer Startup Script verteilen und das wars. Für einen Schönheitspreis könnte man noch ein "RunOnce" drumherum bauen oder den Wert nur dann setzen, wenn er nicht schon auf 24 (18 HEX) steht.


Oder was fertiges von Microsoft:

Disable turn off this device to save power for NIC Power Management (PowerShell)

https://gallery.technet.microsoft.com/scriptcenter/Disable-turn-off-this-f74e9e4a/file/71100/1/DisableNetworkAdapterPnPCapabilities.zip