Squarex 10 Geschrieben 9. Dezember 2011 Melden Teilen Geschrieben 9. Dezember 2011 Guten Tag Habe ein kleines Problem mit Powershell. Ich habe folgende Funktion geschrieben um die Netzwerkadapter auszulesen: function get_network { $nw = @{} $wmi = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object{$_.IpEnabled -eq $true} foreach ($adapter in $wmi) { $nw.Ip += $adapter.IpAddress $nw.Subnet += $adapter.IpSubnet $nw.Gateway += $adapter.DefaultIpGateway $nw.Dns += $adapter.DnsServerSearchOrder $nw.Description += $adapter.Description $nw.Mac += $adapter.MacAddress } return $nw } Das Problem jetzt, wenn es mehrere Adapter sind, werden die Daten in $nw vom nächsten Adapter überschrieben. Mit += kann ich es anhängen, aber ich denke es sollte auch eine schönere Lösung geben, mit der man die Daten trennen kann? Gruss Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 9. Dezember 2011 Melden Teilen Geschrieben 9. Dezember 2011 Hi, für welchen zweck soll die Ausgabe dienen? Je nach Anwendungszweck könnte man die Daten auch in einem Array speichern o.ä., kommt darauf an, was danach damit passieren soll. Folgendes reicht nicht aus? Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object{$_.IpEnabled -eq $true} | Select IPAddress, IPSubnet, DefaultIPGateway, DnsServerSearchOrder, Description, MacAddress Viele Grüße olc Zitieren Link zu diesem Kommentar
Squarex 10 Geschrieben 9. Dezember 2011 Autor Melden Teilen Geschrieben 9. Dezember 2011 Nein, ich möchte die Daten danach weiterverwerten (Reports, etc.). Darum hab ich zu einer Hash-Table gegriffen. Aber du hast mich auf eine Idee gebracht, evtl. könnte ich den Array den deine Variante ausgibt weiterverwenden, weil ich ja immer weiss, das ein Netzwerkadapter 6 Zeilen umfasst. Ist aber eigentlich auch keine optimale Lösung, sollte aber funktionieren. Gruss Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 9. Dezember 2011 Melden Teilen Geschrieben 9. Dezember 2011 Hi, im Kern kannst Du den Inhalt von "$wmi" an jeder Stelle im Script verwenden. Dazu mußt Du es nicht einer gesonderten Variable zuweisen, so wie in Deinem Beispiel oben geschehen. function get_network { $wmi = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object{$_.IpEnabled -eq $true} return $wmi } get_network $wmi | ForEach { $_.IpAddress $_.IpSubnet $_.DefaultIpGateway $_.DnsServerSearchOrder $_.Description $_.MacAddress write "" } Obwohl in dem Fall das "return" nicht ganz sauber ist. Eigentlich müßtest Du mit Set-Variable o.ä. arbeiten. Wie gesagt, ohne genau zu wissen, was Du konkret machen möchtest, wird es schwer... Viele Grüße olc Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 9. Dezember 2011 Melden Teilen Geschrieben 9. Dezember 2011 Hi, Über ein Array function get_network { $nw = @{} $a=@() $wmi = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object{$_.IpEnabled -eq $true} foreach ($adapter in $wmi) { $nw = @{} $nw.Ip += $adapter.IpAddress $nw.Subnet += $adapter.IpSubnet $nw.Gateway += $adapter.DefaultIpGateway $nw.Dns += $adapter.DnsServerSearchOrder $nw.Description += $adapter.Description $nw.Mac += $adapter.MacAddress $a+=$nw } "Anzahl Netzwerkkarten: {0}" -f $(1+$($a.count)) } get_network dann hast du sie alle Hashes als Arrayelemente getrennt blub Zitieren Link zu diesem Kommentar
Squarex 10 Geschrieben 10. Dezember 2011 Autor Melden Teilen Geschrieben 10. Dezember 2011 :eek: Danke dir blub, das funktioniert wunderbar. P.S. Das Script dient zum (nach)dokumentieren. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.