PowerShell Bedingung?

2 Antworten

der Klassiker:

$xy='AB'
if ($xy -eq 'AB') {$xy='CD'}
$xy  # mal  anzeigen

der ganz ohne if dafür mit regEx:

$xy='AB'
$xy=$xy -replace '^AB$','CD'
$xy

Erklarung:

folgenden String durch 'CD' ersetzen und der Variable zuweisen:

  • ^Zeilenanfang
  • AB
  • $Zeilenende

Wenn dieses Muster nicht stimmt, gibts nichts zu ersetzen und alles beibt wie es ist.

$xy='ABc'
$xy=$xy -replace '^AB$','CD'
$xy

für kleine Strings und einfach Muster dürfte das etwas "overdressed" sein, hat aber potential

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
regex9  27.06.2023, 20:14

Beim Vergleich via -eq sollte man allerdings berücksichtigen, dass die Prüfung case-insensitiv ist. Das heißt, die Strings ab, AB, aB, Ab werden alle als gleich gewertet.

Dasselbe gilt bei -replace.

Für ein case-sensitives Verhalten sollten -ceq / -creplace verwendet werden.

0
max19880817 
Fragesteller
 27.06.2023, 20:18

oh super danke! Und wie kann ich eine 2 Bedingung einfügen? Also wenn der Wert nicht "AB" sondern "YZ" ist soll "EF" in die Variable $XY gesetzt werden. Das geht doch irgendwie mit "else" oder?

0
Erzesel  27.06.2023, 20:53
@max19880817

Wenn Du meherer verleichs-muster Durch das Gleiche ersetzen möchtest wäre die Replace-variante einfacher zu handhaben

$xy=$xy -creplace '^(AB|YZ)$','CD'

oder besser switch


$xy = 'YZ'
switch -casesensitive ($xy)
{
    'AB' {$xy = 'CD'}
    'YZ' {$xy = 'EF'}
    'Blubb' {$xy = 'Aus die Maus'}
}
$xy
0

Mittels einer if-Anweisung:

$xy = "AB"

if ($xy -ceq "AB") {
  $xy = "CD"
}

Write-Output $xy # "CD"