Jump to content
Sign in to follow this  
Squarex

Powershell: Daten aus For-Schleife speichern?

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...