derhoeppi
Goto Top

Powershell Abruf von Daten aus einem Array

Hallo,

ich habe ein globales Array aus dem ich bestimmte Daten haben möchte. Das Array $a umfasst folgende Felder: ESXHost, VMNIC, LLDPPort, VLAN, etc.
Wenn ich aus einer anderen Funktion folgenden Aufruf starte:
$vlan = $a[1].VLAN

erhalte ich die VLAN-ID. Ich möchte das ganze jedoch weiter filtern, weil ich letztlich den ESX-Host, sowie die VMNIC abgleichen möchte. Dabei wollte ich mich mit folgender Zeile herantasten.
$vlan = $a.VLAN | ?{$_.VMNIC -eq "vmnic1"}  
Wenn ich das abschicke, bleibt die Variable $vlan leer.

Gruß
derhoeppi

Content-Key: 278256

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

Printed on: April 19, 2024 at 20:04 o'clock

Mitglied: 122990
Solution 122990 Jul 24, 2015 updated at 09:35:07 (UTC)
Goto Top
Du meinst statt Array sicherlich ein Objekt-Array, denn nur die haben Eigenschaften face-wink

Du musst in dem Fall dann schon das ganze Objekt übergeben sonst findet das Where-Object ja die Eigenschaft VMNIC nicht ...
$vlan = $a | ?{$_.VMNIC -eq "vmnic1"} | select -Expand VLAN  
Gruß grexit
Member: derhoeppi
derhoeppi Jul 24, 2015 at 11:53:21 (UTC)
Goto Top
Hallo grexit

ich möchte an dieser Stelle noch eine weitere Frage stelle. Ein Array $b enthält mehrere ganze Zahlen. Eine Zahl davon ist das VLAN aus dem Array $a. Ich möchte dieses nu aus dem Array $b entfernen. Leider erhalte ich einmal die Meldung das die Größe des Array fixed ist. Wenn ich
$b -= $vlan
eingebe, dann erhalte ich als Meldung, dass die Substrktion nicht durchgeführt werden kann. Wenn ich mit $b.Remove($vlan) arbeite, erhalte ich die Meldung das die Größe des Array fixiert ist.

Wie kann ich ein Element meines Arrays entfernen.

Gruß
derhoeppi
Mitglied: 122990
122990 Jul 24, 2015 updated at 12:03:22 (UTC)
Goto Top
Simple Powershell Arrays sind Fix aus diesen kannst du kein Element entfernen, jedoch kannst du es so neu aufbauen:
$b = $b -ne $vlan
Man kann auch statt simplen Powershell Arrays stattdess .NET Arraylists verwenden wenn man will, bei diesen lassen sich Elemente auch direkt entfernen.

Gruß grexit
Member: derhoeppi
derhoeppi Jul 24, 2015 at 12:28:26 (UTC)
Goto Top
Hallo grexit,

mit der Arraylists habe ich es ebenfalls versucht. Ich habe jedoch das Gefühl, dass sich der Type des Array im Laufe des Skriptes verändert. Habe mir den Typ jedoch nicht expliziert ausgeben lassen.

Gruß
derhoeppi
Mitglied: 122990
122990 Jul 24, 2015 updated at 13:04:08 (UTC)
Goto Top
das obige geht aber einwandfrei.
Kannst du alternativ natürlich auch so schreiben
$b = $b | ?{$_ -ne $vlan}

Ohne mehr Info über das was du machst, Raten mit der Glaskugel.

Ich würde dir erst mal raten einen Powershellkurs mit den Grundlagen zu Objekten zu absolvieren.