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-Key: 567972

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

Printed on: April 19, 2024 at 09:04 o'clock

Member: em-pie
Solution em-pie Apr 26, 2020 at 18:17:47 (UTC)
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
Mitglied: 143728
Solution 143728 Apr 26, 2020 updated at 18:39:55 (UTC)
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"  
}
Member: Molly11
Molly11 Apr 26, 2020 at 19:28:18 (UTC)
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
Mitglied: 143728
Solution 143728 Apr 26, 2020 updated at 20:38:13 (UTC)
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. ...
Member: Molly11
Molly11 Apr 27, 2020 at 06:12:46 (UTC)
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
Member: Molly11
Molly11 Apr 27, 2020 updated at 08:01:42 (UTC)
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
Member: em-pie
em-pie Apr 27, 2020 at 08:07:22 (UTC)
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)
Member: Molly11
Molly11 Apr 27, 2020 at 11:37:20 (UTC)
Goto Top
Entschuldige, jedoch sind die <<<< aus der Fehleranweisung von Powershell- face-wink
Mitglied: 143728
143728 Apr 27, 2020 updated at 11:50:40 (UTC)
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
Member: Molly11
Molly11 Apr 27, 2020 at 13:34:43 (UTC)
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
Mitglied: 143728
143728 Apr 27, 2020 updated at 14:41:29 (UTC)
Goto Top
Da ist dann wohl das Update längst schon überfällig 😉.
Oder wenn du nicht darfst hast du ja genügend Ausweichvarianten 👌