molly11
Goto Top

Vergleich mehrerer Werte in einer IF Abfrage

Hallo zusammen,

ich hänge im Moment doch etwas an der Formatierung einer IF Abfrage mit mehreren Werten.
Mit nur einem Wert funktioniert der Ersatz super.

Kann mir jemand die korrekte Formatierung bitte geben, Habe wie unten ersichtlich schon m.E. alles durch.
Es waren auch andere Kombinationene dabei- face-smile Mit ' ' ; " " etc.


if ($tddate -eq "25" -and $tmdate -eq "01","03")
{$tddate = "01"}
if ($tddate -eq "00" -and $tmdate -eq "[04\06\09\11]")

Vielen Dank.

Markus

Content-ID: 567972

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

Ausgedruckt am: 19.11.2024 um 04:11 Uhr

em-pie
Lösung em-pie 26.04.2020 um 20:17:47 Uhr
Goto Top
Moin,

schreibe die zu prüfenden Werte in ein Array und prüfe mit myObject.Contains() die Werte.

Da du keine Programmiersprache angegeben hast, kann man dir hier nicht konkret helfen.

Visual Studio supportet nämlich mehrere Sprachen:
https://visualstudio.microsoft.com/de/vs/features/web/languages/

Gruß
em-pie
143728
Lösung 143728 26.04.2020 aktualisiert um 20:39:55 Uhr
Goto Top
Quizfrage:
$y = $x + 1
Welchen Wert hat $y ?

Hoffe du weißt jetzt wenigstens was in deinem Beitrag oben zur Interpretation fehlt ... Ganz zu schweigen von der Kategorie "Visual Studio" passt hier irgendwie nicht zu dem Powershell Code den du oben offensichtlich nutzen willst?! Hier wäre dann Batch und Shell passender.

Ich tippe hier mal ins blaue was du vielleicht meinst
if ($tddate -eq "25" -and $tmdate -in @("01","03"))  
{
    $tddate = "01"  
}
Molly11
Molly11 26.04.2020 um 21:28:18 Uhr
Goto Top
Vielen Dank für die schnelle Reaktion.

@em-pie,
danke für den Hinweis mit myObject.Contains(). Werde ich austesten. face-smile

Ja stimmt, habe vielleicht mit Visual etwas daneben gegriffen-
Cabrinha , danke für den Tip mit Shell oder Batch.

Muß ich -in @( generell verwenden?

Kenne ich nicht, die Interpretation des -in @.

Gruß
M
143728
Lösung 143728 26.04.2020 aktualisiert um 22:38:13 Uhr
Goto Top
Zitat von @Molly11:


Muß ich -in @( generell verwenden?
Musst du nicht, es gibt noch viele andere Varianten.
Kenne ich nicht, die Interpretation des -in @.
Das -in ist ein Operator der prüft ob der Wert der vor ihm steht in dem Array vorkommt das hinter im steht, das @() ist nur eine klare Kennzeichnung eines Arrays, du kannst da stattdessen auch eine Variable einsetzen, oder das Array einfach ohne das @ in Klammern setzen.

Das hier geht z.B. alternativ auch (umgedrehte Variante bei der das Array vor dem Operator steht)
if ($tddate -eq "25" -and ("01","03") -contains $tmdate)  
{
    $tddate = "01"  
}
oder folgendes geht auch (Regex Variante)
if ($tddate -eq "25" -and $tmdate -match '^(01|03)$')  
{
    $tddate = "01"  
}

Bitte lies doch einfach die Doku zu den Vergleichsoperator, dann bist auch du schlauer als vorher 👍
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Molly11
Molly11 27.04.2020 um 08:12:46 Uhr
Goto Top
Moin Cabrinha,

danke für die weiteren Beispiele der Möglichkeiten.

Und danke für den Link. Das Wort
Vergleichsoperatoren in Bezug auf Array und "Verkettung" hatte
ich nicht so auf dem Schirm.

Gruß
M
Molly11
Molly11 27.04.2020 aktualisiert um 10:01:42 Uhr
Goto Top
Als Info ...

Der Versuch mit dem -in @ scheitert bei mir kläglich mit folgender Meldung:

PS C:\Users\MollyStu> E:\PS\xxx_finam_ß2.ps1
Sie müssen auf der rechten Seite des Operators "-" einen Wertausdruck angeben.
Bei E:\PS\xxx_finam_ß2.ps1:103 Zeichen:46
+if ($tddate -eq "00" -and $tmdate - <<<< in @("01","03","05","07","08","10","12")
+ CategoryInfo : ParserError: ( : ) , ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedValueExpression

Allerdings ist die Variante mit -contains $tmdate erfolgreich.

Gruß
M
em-pie
em-pie 27.04.2020 um 10:07:22 Uhr
Goto Top
Die Ursache sind die ganzen <<<<<< in deinem Script.


Ferner: nutze bitte die Code-Tags hier

<co de>
</co de>

(Ohne die Leerzeichen zwischen o und d)
Molly11
Molly11 27.04.2020 um 13:37:20 Uhr
Goto Top
Entschuldige, jedoch sind die <<<< aus der Fehleranweisung von Powershell- face-wink
143728
143728 27.04.2020 aktualisiert um 13:50:40 Uhr
Goto Top
Da ist bei dir ein Leerzeichen zu viel, das klappt nämlich einwandfrei min jung 😉!!
Stelle außerdem sicher das deine Powershell aktuell ist, den -in Operator gibt es erst ab PS 3.0
Molly11
Molly11 27.04.2020 um 15:34:43 Uhr
Goto Top
Voll ins Schwarze getroffen. face-sad

PS E:\PS> $PSVersionTable

Name Value
-----
CLRVersion 2.0.50727.5420
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
143728
143728 27.04.2020 aktualisiert um 16:41:29 Uhr
Goto Top
Da ist dann wohl das Update längst schon überfällig 😉.
Oder wenn du nicht darfst hast du ja genügend Ausweichvarianten 👌