andy-m
Goto Top

Powershell liefert statt Arrayinhalt immer den aktuellen Pfad und den Arrayinhalt zurück

Hallo zusammen,

ich beschäftige mich gerade ein wenig mit der Powershell. Nachdem ich mich in die Grundlagen eingearbeitet habe möchte ich jetzt ein kleines Beispielskript schreiben.
Mein Kollege hat mich auf die Idee gebracht ein Script zu schreiben, dass aus der Registry ausliest, ob die Speed&Duplex-Einstellung der Netzwerkkarte auf "Auto" steht oder nicht.

Mit folgendem Code kann ich das ganze auch für meinen Rechner passend abfragen:
$lanspeed = Get-ItemProperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0008" -name RequestedMediaType  
if ($lanspeed.RequestedMediaType -eq 0)
   {"Autonegotiation ist aktiviert."}  

Jetzt möchte ich die Abfrage gern etwas Allgemeiner halten, dazu soll folgender Code dienen:
$substrings = get-childitem 'HKLM:\System\Currentcontrolset\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}'  
$substrings | Foreach-Object {Get-Itemproperty $_}

Was ich mir eigentlich als Ausgabe wünschen würde wäre eine Liste der Werte der Subkeys von {4D36E972-...}. Daraus könnte man dann abfragen ob es das Attribut "RequestedMediaType" (für Broadcom-Karten) oder "SpeedDuplex" (für Intel-Karten) gibt und welche Werte dort gesetzt sind.
Leider bekomme ich jedoch als Ausgabe immer folgendes: "Aktuelles Arbeitsverzeichnis\Arrayinhalt" also zB: C:\HKLM\System\und\so\weiter

Hier noch beispielhaft die Fehlermeldung:
Get-ItemProperty : Der Pfad "C:\temp\powershell\duplex\HKEY_LOCAL_MACHINE\Syste  
m\Currentcontrolset\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0000"   
kann nicht gefunden werden, da er nicht vorhanden ist.
Bei C:\temp\powershell\duplex\speed.ps1:2 Zeichen:47
+ $substrings | Foreach-Object {Get-Itemproperty  <<<< $_}
Dieser Fehler taucht dann für alle Objekte unterhalb von HKLM:\...{4D36E972-...} auf.
Die Fehlermeldung ist klar, den Pfad gibt es tatsächlich nicht. Wenn ich mir aber nur das Array ausgeben lasse, dass gibt er mir den Pfad richtig zurück.

Ich hoffe mir kann jemand einen Tipp geben wo ich den Fehler gemacht habe, bzw. wie ich ihn lösen kann. Eine ausgiebige Googlesuche hat leider zu keiner Erleuchtung geführt.

Viele Grüße

Andy

Content-Key: 139010

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

Printed on: April 18, 2024 at 04:04 o'clock

Member: Andy-M
Andy-M Mar 25, 2010 at 12:46:02 (UTC)
Goto Top
Ich konnte das Problem inzwischen selbst lösen indem ich direkt auf den PSPath zugreife.
Das komplette Skript funktioniet jetzt. Allerdings nur für Broadcom- und Intel-Netzwerkkarten.
Ich habe das Skript dann noch ein wenig umgebaut, dass es jetzt folgendermaßen aussieht:

$path = 'HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}'  
$subpath = Get-ChildItem $path
$values = $subpath | ForEach-Object {Get-Itemproperty $_.pspath} | where-object {$_.RequestedMediaType -ne $null -or $_.SpeedDuplex -ne $null}
$values | ForEach-Object {if ($_.requestedmediatype -eq 0 -or $_.speedduplex -eq 0 ) {write-host $_.driverdesc ist auf Auto eingestellt.} else {write-host $_.driverdesc ist NICHT auf Auto eingestellt}}
Start-Sleep -s 10

Viele Grüße

Andy