Jump to content

Powershell: Daten aus For-Schleife speichern?


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...