lhbl2003
Goto Top

LAN Adapter Skript - Computer kann dieses Gerät ausschalten, um Strom zu sparen

Für alle die wissen wollen wie man unter Windows 11 die Option "Computer kann dieses Gerät ausschalten, um Energie zu sparen" / Allow the computer to turn off this device to save power. im Netzwerkadapter per Skript deaktivieren kann, hoffe ich, dass dieses Skript weiterhilft. Denn die beschriebenen Varianten mit dem RegEdit Parameter "PnPCapabilities" funktioniert bei mir nicht.


2024-09-09_13h44_29

# Ersteller:       Denis Hempel
# Datum:           09.09.2024
# Beschreibung:    Dieses Skript deaktiviert bei allen physischen Netzwerkkarten die Option "Computer kann das Gerät ausschalten, um Energie zu sparen" unter:  
#                  "Systemsteuerung" > "Netzwerk- und Freigabecenter" > "Adaptereinstellungen ändern" > "Adapter auswählen" > "Eigenschaften" > "Konfigurieren ..." > "Energieverwaltung" 
#                  Laut Microsoft funktionierte dies wohl unter Windows 7 mit "PnPCapabilities" siehe auch https:{{comment_single_line_double_slash:0}}
#                  Allerdings setzt "PnPCapabilities" nur einige bestimmte Konbinationen wie 0 und 256. Dagegen funktioniert der Wert 280 nicht! 
#                  Eine Analyse mit dem Tool "RegistryChangesView" zeigte, das sich 5 Sekunden nach deaktivierung der Option "Computer kann das Gerät ausschalten, um Energie zu sparen" der Wwert IdleInWorkingState in einem 
#                  anderen Bereich änderte, welcher ausschlaggebend für das aktivieren und deaktivieren der haupt Checkbox ist.
#
# Danksagung:      KurtDeGreeff        - Basisscript auf dem dieses gebaut wurde: https://github.com/KurtDeGreeff/PlayPowershell/blob/master/DisableNetworkAdapterPnPCapabilities.ps1
#                  RegistryChangesView - Schnelles Vergleichstool für RegEdit, so das nicht zu viele unwichtige RegEdit Änderungen aufgezeichnet wurden.: https://www.nirsoft.net/utils/registry_changes_view.html


Function Disable-OSCNetAdapterPnPCapabilities
{
    # Sammel alle physischen Netzwerkadapter zusammen
	# Wenn der Wert der Eigenschaften von adaptersConfigManagerErrorCode 0 ist, bedeutet dies, dass das Gerät ordnungsgemäß funktioniert.
    # Dies gilt auch für aktivierte oder nicht angeschlossene Geräte. 
    # Wenn der Wert der Eigenschaften von configManagerErrorCode 22 ist, bedeutet dies, dass der Adapter deaktiviert wurde.
	$PhysicalAdapters = Get-WmiObject -Class Win32_NetworkAdapter|Where-Object{$_.PNPDeviceID -notlike "ROOT\*" `  
	-and $_.Manufacturer -ne "Microsoft" -and $_.ConfigManagerErrorCode -eq 0 -and $_.ConfigManagerErrorCode -ne 22}   
	
    # Prüfe / Bearbeite alle physischen Netzwerkadapter
	Foreach($PhysicalAdapter in $PhysicalAdapters)
	{
		$PhysicalAdapterName = $PhysicalAdapter.Name # Name Netzwerkadapter

		# Geräte ID
		$DeviceID = $PhysicalAdapter.DeviceID # Prüft die eindeutige Geräte-Identifikationsnummer des Netzwerkadapters in der aktuellen Umgebung.
        $AdapterDeviceNumber = '{0:d4}' -f [int]$DeviceID # Mit nullen auffüllen wie in der RegEdit  

		# Prüfen, ob der Registrierungspfad existiert.
		$KeyPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\$AdapterDeviceNumber"  
		If(Test-Path -Path $KeyPath)
		{
            $DeviceInstanceID = (Get-ItemProperty -Path $KeyPath).DeviceInstanceID # Ist u.a. ein Teil des Pfades um den RegEdit Ordner "Device Parameters\WDF" zu finden  

            # Prüft ob es einen WDF-Pfad in der RegEdit für das Device gibt, andernfalls hat dieses Netzwerk-Device wahrscheinlich keine Energieoption.
            $KeyPath = "HKLM:System\ControlSet001\Enum\$DeviceInstanceID\Device Parameters\WDF"  
		    If(Test-Path -Path $KeyPath)
		    {
			    $IdleInWorkingStateValue = (Get-ItemProperty -Path $KeyPath).IdleInWorkingState
                Try
				{
			        If($IdleInWorkingStateValue -eq $null)
			        {
				    	New-ItemProperty -Path $KeyPath -Name "IdleInWorkingState" -Value 0 -PropertyType DWord | Out-Null  
				    	Write-Host """$PhysicalAdapterName"" - Die Option ""Computer kann das Gerät ausschalten, um Energie zu sparen"" wurde deaktiviert (Parameter Erstellung). Neustart erforderlich um die Anpassung im Netzwerkadapter zu sehen." -ForegroundColor Yellow  
				        
			        }
			        elseif ($IdleInWorkingStateValue -eq 0)
			        {
				        Write-Host """$PhysicalAdapterName"" - Die Option ""Computer kann das Gerät ausschalten, um Energie zu sparen"" wurde bereits deaktiviert. (Parameter Änderung)" -ForegroundColor Green  
			        }
			        elseif ($IdleInWorkingStateValue -ne 0)
			        {	
				    	Set-ItemProperty -Path $KeyPath -Name "IdleInWorkingState" -Value 0 | Out-Null  
				    	Write-Host """$PhysicalAdapterName"" - Die Option ""Computer kann das Gerät ausschalten, um Energie zu sparen"" wurde deaktiviert (Parameter Änderung). Neustart erforderlich um die Anpassung im Netzwerkadapter zu sehen." -ForegroundColor Yellow  
			        }
                }
				Catch
				{
					Write-Host "Das Setzen des Wertes von Eigenschaften von PnpCapabilities ist fehlgeschlagen. GGf. das Script als Administrator ausführen." -ForegroundColor Red  
				}
            }
		}
		Else
		{
			Write-Warning "RegEdit Pfad nicht gefunden: ($KeyPath)"  
		}
	}
}


Für alle die darüber gestolpert sind und dennoch nicht weitergekommen sind, es ging mir genauso ;)
- Aus dieser Anleitung funktioniert Wert 0 und 256 funktionieren, Wert 280 natürlich nicht:
https://learn.microsoft.com/de-de/troubleshoot/windows-client/networking ...

- Es ist Microsoft zu verdanken, dass dieser Beitrag nicht mehr beantwortet werden kann. Sonst wäre die Antwort sicher schon längst da.
https://answers.microsoft.com/en-us/windows/forum/all/power-management-a ...

Danksagung
KurtDeGreeff - Basisscript auf dem dieses gebaut wurde: https://github.com/KurtDeGreeff/PlayPowershell/blob/master/DisableNetwor ...

RegistryChangesView - Schnelles Vergleichstool für RegEdit, sodass nicht zu viele unwichtige RegEdit Änderungen aufgezeichnet wurden (Nein keine Werbung, habs auch das erste Mal benutzt).: https://www.nirsoft.net/utils/registry_changes_view.html

Content-ID: 667987

Url: https://administrator.de/contentid/667987

Ausgedruckt am: 21.11.2024 um 07:11 Uhr

14260433693
14260433693 09.09.2024 aktualisiert um 14:25:39 Uhr
Goto Top
Als Ergänzung :
Gewisse Power Management Optionen von Netzwerkadaptern lassen sich auch mit Disable-NetAdapterPowerManagement selektiv deaktivieren sofern verfügbar.

Gruß
MortysTerminal
MortysTerminal 20.09.2024 um 09:24:26 Uhr
Goto Top
Vielen Dank für das Skript. Sowas suche ich schon lange und hatte selbst noch nicht die Zeit mich damit genauer zu beschäftigen.

Leider hatte ich noch keinen Erfolg mit dem Skript, denn die Abfrage bei Zeile 38-40 gibt bei mir immer 'false' aus, obwohl bei meinen Testgeräten die Energieoptionen existieren.

Ich habe dies sowohl an einem Windows 11 Client (Tower-PC), als auch auf einer meiner Windows-Server-2019-VM (auf VMware) ausprobiert. Beide haben auch Energieoptionen verfügbar, wenn ich im Geräte-Manager in die Einstellungen der Netzwerkkarten gehe.

Spontan eine Idee?

(Ich habe bei dem Skript lediglich 3 Zeilen hinzugefügt, damit ich eine Ausgabe bei der Abfrage habe. Das ist so in deinem Original nicht vorhanden)
bildschirmfoto 2024-09-20 um 09.08.32