huibuh2010
Goto Top

Powershell foreach IF Abfrage

Hallo, leider finde ich kein passendes Thema zu Powershell Script, falls es falsch ist, bitte löschen.

Ich habe eine CSV Datei mit Vorname und Nachnahme,

z.B.

Torsten Tester
Silke Muster

Aufgabe: Ich trage den Vornamen und Nachnahmen via Input in die Shell und das Script soll dann mit eine foreach Schleife die CSV durchsuchen und bei richtigen Treffer die Ausgabe "Torsten Tester ist vorhanden" schreiben und falls nicht "Torsten Tester ist nicht vorhanden"

Die Abfrage erfolgt und das funktioniert auch, leider kommt die Ausgabe falsch bzw. zu oft.

Wenn ich z.B. Silke Muster suche, dann kommt bei jeder Abfrage der Schleife "ist nicht vorhanden" bist er zu der Zeile kommt, wo der Name vorhanden ist und wenn es einen Namen gar nicht gibt kommt die Ausgabe "nicht vorhanden" so oft wieviele Einträge es gibt.

Hat da jemand eine Idee? Vielen Dank

Content-Key: 2184667433

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

Printed on: April 27, 2024 at 22:04 o'clock

Member: LauneBaer
LauneBaer Mar 16, 2022 at 11:40:41 (UTC)
Goto Top
Servus,

es würde durchaus helfen, wenn du deinen Code auch mit posten könntest. ;)

Grüße
Member: Huibuh2010
Huibuh2010 Mar 16, 2022 at 11:47:51 (UTC)
Goto Top
Sorry, klaro anbei der Code

$Employee_list = Import-Csv C:\Test.csv
$EmployeeID = Read-Host -Prompt "bitte geben Sie den Vornamen ein"  

foreach ($Employee in $Employee_list) {
            If ($Employee.Surname -eq $EmployeeID) {
                write-host "$EmployeeID ist vorhanden"  
                break
            else
                write-host "$Employee ist nicht vorhanden"  
            }
}
Member: SlainteMhath
SlainteMhath Mar 16, 2022 at 11:51:53 (UTC)
Goto Top
Moin,

naja ist ja auch klar. In jeder Zeile die nicht gleich EmployeeID ist wird "... ist nicht vorhanden ausgeben".

Du das umstricken, so daß beim ersten Aufinden "... ist vorhanden" ausgebeben und dann abgebrochen wird. Wenn am Ende der Datei nix gefunden wurde, must einmalig "... ist nicht vorhanden " ausgegeben werden.

lg,
Slainte
Member: em-pie
em-pie Mar 16, 2022 at 11:59:54 (UTC)
Goto Top
Moin,

dein Problem ist, dass du im das else die brackets vergessen hast.

du musst das so schreiben
if ("bla" -eq "bla") {  
 write-host "treffer"  
} else {
 write-host "kein treffer  
}
Member: Huibuh2010
Huibuh2010 Mar 16, 2022 at 11:59:59 (UTC)
Goto Top
Zitat von @SlainteMhath:

Moin,

naja ist ja auch klar. In jeder Zeile die nicht gleich EmployeeID ist wird "... ist nicht vorhanden ausgeben".

Du das umstricken, so daß beim ersten Aufinden "... ist vorhanden" ausgebeben und dann abgebrochen wird. Wenn am Ende der Datei nix gefunden wurde, must einmalig "... ist nicht vorhanden " ausgegeben werden.

lg,
Slainte

Das weiß ich ja, deswegen frage ich um Hilfe face-smile Du hast mir gerade die Lösung erklärt, die ich oben schon erwähnt habe ^^
Member: Huibuh2010
Huibuh2010 Mar 16, 2022 at 12:01:03 (UTC)
Goto Top
Zitat von @em-pie:

Moin,

dein Problem ist, dass du im das else die brackets vergessen hast.

du musst das so schreiben
if ("bla" -eq "bla") {  
 write-host "treffer"  
} else {
 write-host "kein treffer  
}

Ah okay, teste ich mal. Danke Dir
Member: SlainteMhath
SlainteMhath Mar 16, 2022 at 12:08:28 (UTC)
Goto Top
Das weiß ich ja, deswegen frage ich um Hilfe face-smile face-smile Du hast mir gerade die Lösung erklärt, die ich oben schon erwähnt habe ^^
naja den Code für deine Hausaufgabe musst du schon selbst entwickeln :D Tipp: setze dir ein Flag, das du am Ende der Foreach Schleife abfragen kannst.
Member: em-pie
em-pie Mar 16, 2022 at 12:09:37 (UTC)
Goto Top
UND ich würde das Script anders aufbauen:

$EmployeeID = Read-Host -Prompt "bitte geben Sie den Vornamen ein"  
$Employee_list = Import-Csv C:\Test.csv -Delimiter ";" | where-object { $_.firstname -eq $EmployeeID}  

If ($Employee_list.Count -gt 0) {
    Write-Host "$EmployeeID kommt $($Employee_list.Count) mal vor"  
} else {
    write-Host "$EmployeeID ist nicht vorhanden"  
}
Member: Huibuh2010
Huibuh2010 Mar 16, 2022 at 12:10:52 (UTC)
Goto Top
Zitat von @em-pie:

Moin,

dein Problem ist, dass du im das else die brackets vergessen hast.

du musst das so schreiben
if ("bla" -eq "bla") {  
 write-host "treffer"  
} else {
 write-host "kein treffer  
}

Ok, das ist genauso wie vorher. Kein Erfolg. Trotzdem Danke

Hatte es mit eine Variable schon gemacht, die ist auf false vor der Schleife und wenn der Name vorhanden ist setze auf True + Ausgabe. Dachte es geht irgendwie einfacher
Member: SlainteMhath
SlainteMhath Mar 16, 2022 at 12:12:33 (UTC)
Goto Top
UND ich würde das Script anders aufbauen:
Ja so, oder aber auch einfach ein IF mit "-contains" oder "-in" face-smile
Member: em-pie
em-pie Mar 16, 2022 at 12:16:39 (UTC)
Goto Top
Zitat von @SlainteMhath:

UND ich würde das Script anders aufbauen:
Ja so, oder aber auch einfach ein IF mit "-contains" oder "-in" face-smile

auf das IF würde ich eigentlich verzichten. Also um zu validieren, ob der Name in der CSV vorkommt.
In seiner Variante lädt er ja erst die gesamte CSV ins Objekt und validiert dann Zeile für Zeile. "Ich" erfasse von vornherein nur jene, die auch dem erfassten Vornamen entsprechen.

Wir wissen ja nicht, wie groß diese CSV ist. sind es 10 Datensätze oder 10 Mrd.!?

Aber per se hast du natürlich recht face-smile
Member: SlainteMhath
SlainteMhath Mar 16, 2022 at 15:06:04 (UTC)
Goto Top
Wir wissen ja nicht, wie groß diese CSV ist. sind es 10 Datensätze oder 10 Mrd.!?
Da hst du natürlich recht. Performanter ist dann dein Filter.