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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

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

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...