wenn -ODER-Anweisung mit Vergleichsoperatoren funktioniert nicht wie erwartet
Ich habe den folgenden code-snippet und ich kann nicht herausfinden, warum die if
funktioniert nicht.
Das Ziel ist es, eine Eingabe vom Benutzer, und wenn es eine gültige Eingabe fortsetzen. Wenn nicht, dann halten Sie Fragen, bis es einen gültigen Eintrag.
Egal welchen Wert ich eingeben auf die erste Frage (z.B. wmic), es geht IMMER in den do loop
. Bei der Eingabe von, sagen wmic auf den zweiten Durchlauf bricht es die tun, wie gewünscht. Ungültige Einträge, halten Sie mich im loop, bis ich einen richtigen Eintrag.
$query_means = read-host 'Enter one of psinfo, powershell or wmic'
if ($query_means -ne "wmic" -OR $query_means -ne "psinfo" -OR $query_means -ne "powershell")
{
do {
$query_means = read-host 'Invalid entry. Enter one of psinfo, powershell or wmic'
}Until ($query_means -eq "wmic" -OR $query_means -eq "psinfo" -OR $query_means -eq "powershell")
}
Den until
Vergleiche ganz gut funktioniert, zu brechen, wenn gewünscht.
InformationsquelleAutor PS_newbie | 2016-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die falschen Betreiber. Lassen Sie uns sagen, dass
$query_means
istwmic
. Dann ist deine erste Bedingung derif
Aussage istfalse
jedoch die beiden anderen Bedingungen sindtrue
. Da Sie überOR
- operator, das Ergebnis isttrue
. MitOR
Betreiber Sie haben immer mindestens 2 Bedingungen, die ausgewertettrue
, so dass das Gesamtergebnis wird immertrue
.Stattdessen sollten Sie mit Hilfe
AND
Betreiber, weil Sie wollen die Bedingung, um gültig zu sein, wenn keiner der strings in der Liste, die Sie zur Verfügung gestellt.So ändern
-OR
zu-AND
und Ihr code sollte in Ordnung sein:InformationsquelleAutor dotnetom