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

Ausgedruckt am: 29.03.2024 um 11:03 Uhr

Mitglied: TlBERlUS
TlBERlUS 24.03.2015 um 08:00:57 Uhr
Goto Top
Guten Morgen,

evtl. reicht dir ein
<code/>
foreach($a in $array){
if($a -eq "irgendeinwert"){
$a
}
}
Mitglied: 114757
Lösung 114757 24.03.2015 aktualisiert um 08:54:42 Uhr
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
Mitglied: derhoeppi
derhoeppi 24.03.2015 aktualisiert um 08:54:35 Uhr
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 24.03.2015 aktualisiert um 08:59:51 Uhr
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...
Mitglied: TlBERlUS
TlBERlUS 24.03.2015 aktualisiert um 09:07:31 Uhr
Goto Top
Steht in <code/>-eq "irgendeinwert" "name : CB_Name" oder nur "CB_Name" ?

Edit: Die Infos die Jodel32 nachfragt sind durchaus relevant.
Mitglied: derRobert
derRobert 05.11.2015 um 00:30:13 Uhr
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 05.11.2015 aktualisiert um 09:09:25 Uhr
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