derhoeppi
Goto Top

PowerShell Wert in Array finden

Hallo,

in meinem Projekt lese ich einen Eintrag aus einer Combobox aus. Dieser wird in eine Variable / Objekt $CB_Name geschrieben. Ziel ist es diesen Wert mit einem global definierten Array abzugleichen. Der Wert der Combobox stammt aus dem wieder abzugleichenden Array (Spalten = id, name), so dass es auf jeden Fall einen Treffer geben muss. Ich versuche das nun schon einige Zeit und will zur Kontrolle den Erfolg in einem Label ausgeben.

Bisher habe ich folgendes:
$CB_Name = $Combobox_Name.Text
$Label.Content = $Array.Contains($CB_Name)

Dieser Code liefert immer ein False zurück, was eigentlich nicht sein kann. True oder False wäre an dieser Stelle auch nicht der richtige Rückgabewert um mein Ziel zu erreichen, aber immerhin würde ich sehen, ob das Auffinden des Wertes funktioniert.
Probiert habe ich auch:

$Label.Content = $Array.id | where ($_.name -eq $CB_Name)

Diese Ausgabe bleibt ebenfalls leer. Mein Ziel soll es sein zu dem Namen den ich aus der Combobox erhalte, die entsprechende ID herauszufinden, damit ich diese im weitern Verlauf verwenden kann.

Gruß
derhoeppi

Content-Key: 267235

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

Printed on: April 24, 2024 at 06:04 o'clock

Member: TlBERlUS
TlBERlUS Mar 24, 2015 at 07:00:57 (UTC)
Goto Top
Guten Morgen,

evtl. reicht dir ein
<code/>
foreach($a in $array){
if($a -eq "irgendeinwert"){
$a
}
}
Mitglied: 114757
Solution 114757 Mar 24, 2015 updated at 07:54:42 (UTC)
Goto Top
Fast richtig face-wink, du hattest das Array auf die Eigenschaft ID begrenzt, wolltest aber die Spalte Name vergleichen, das kann ja nicht gehen...
$resultID = $Array | ?{$_.name -eq $CB_Name} | select -Expand ID
if($resultID){
    # ID gefunden...
}Else{
    # ID nicht gefunden
} 
Gruß jodel32

!edit! - Klammern korrigiert
Member: derhoeppi
derhoeppi Mar 24, 2015 updated at 07:54:35 (UTC)
Goto Top
Hallo,
vielen Dank für die Antworten. Das Ergebnis bleibt bis dato dasselbe. In der Foreach-Schleife habe ich ein else-Zweig hinzugefügt um wieder zu prüfen, ob der Wert "irgendeinwert" - quasi mein $CB_Name gefunden wird. Er ist immer sofort in den else Zweig gesprungen, sodass kein erfolgreicher Vergleich durchgeführt wurde.

Die Lösung von Jodel32 hört sich aus meiner Sicht besser / simpler an, aber auch dort erhalte ich keinen Ausgabewert. Es scheint mir bei beiden Lösungen so als ob Powershell mit dem Objekt CB_Name nicht richtig umgeht.

Zum weiteren Test habe ich mir das Array ($Array >> textdatei.txt) in eine Textdatei geschrieben und dort ist der $CB_Name vorhanden. Der Eintrag sieht folgendermaßen aus.

id : 1
name : CB_Name

Das Array hat noch mehrere Einträge, die sich in der ID und dem Namen unterscheiden.


Gruß
derhoeppi


Edit: Die Klammern im Lösungsvorschlag von Jodel32 habe ich bereits korrigiert. Mit dem angeschlossenen im if-else erhalte ich nun auch eine Ausgabe zur Prüfung. Vielen Dank
Mitglied: 114757
114757 Mar 24, 2015 updated at 07:59:51 (UTC)
Goto Top
Was steht denn überhaupt in der Variablen $CB_Name und welchen Typs ist diese, hat diese eventuell noch Eigenschaften oder ist ein Objekt ??
Lass dir mal den Typ der Variablen anzeigen $CB_Name.getType()
Und auch die Member $CB_Name | gm

Du würdest uns es uns hier wesentlich einfacher machen wenn du uns mit deinem Code zeigst wie du die Variable mit ihrem Inhalt erzeugst ! Das oben geht nämlich einwandfrei wenn denn die Variablen den richtigen Inhalt haben...
Member: TlBERlUS
TlBERlUS Mar 24, 2015 updated at 08:07:31 (UTC)
Goto Top
Steht in <code/>-eq "irgendeinwert" "name : CB_Name" oder nur "CB_Name" ?

Edit: Die Infos die Jodel32 nachfragt sind durchaus relevant.
Member: derRobert
derRobert Nov 04, 2015 at 23:30:13 (UTC)
Goto Top
der Beitrag ist zwar schon etwas älter, aber vllt. stolpert doch mal jemand hier vorbei. Hatte ein ähnliches Problem, deshalb:

die where Klausel soll das entsprechende Objekt filtern, also

$Array | where {$_.name -eq "$CB_Name"} # Anführungen wegen evtl. Leerzeichen im Namen, schadet zumindest nicht

Nun soll davon die ID zurückgegeben werden, also das Objekt in Klammern packen und das Element selektieren

$ID = ( $Array | where {$_.name -eq "$CB_Name"} ).id

Schöne Grüße
Mitglied: 114757
114757 Nov 05, 2015 updated at 08:09:25 (UTC)
Goto Top
Zitat von @derRobert:

$Array | where {$_.name -eq "$CB_Name"} # Anführungen wegen evtl. Leerzeichen im Namen, schadet zumindest nicht

Nun soll davon die ID zurückgegeben werden, also das Objekt in Klammern packen und das Element selektieren

$ID = ( $Array | where {$_.name -eq "$CB_Name"} ).id

Moin,
das ist das selbe wie in meinem Post oben, nur auf eine andere Art.
select -Expand ID holt sich ebenfalls die ID.
Der entscheidende Unterschied zu meinem Code ist, dass es bei dir zu einer Exception kommt wenn kein Array-Element passt, weil dann der klammerausdruck $null ist und von $null gibt es keine Eigenschaften face-wink !!

Gruß jodel32