2017-12-28 10 views
0

Ich konvertiere VBScript in PowerShell und ich habe ein Problem mit Select Case. Ich versuche einen Weg zu finden, einen Case Else zu machen.Case Else in PowerShell

switch($IncomingText.SubString(0,1)) { 
    "1" { 
     switch($IncomingText.SubString(12,3)) { 
      "601" { 
       $TempString = ($IncomingText.SubString(0,75)) 

       if (RemoveSpaces($IncomingText.SubString(75,10)) = True) { 
        $TempString = $TempString + (StrReverse($IncomingText.SubString(75,10))) + ($IncomingText.SubString(85,10)) 
       } else { 
        $TempString = $TempString + ($IncomingText.SubString(75,20)) 
       } 
       return $TempString 

       Case Else 
       if (RemoveSpaces($IncomingText.SubString(155,10)) = True) { 
        $TempString = $TempString + (StrReverse($IncomingText.SubString(155,10))) + ($IncomingText.SubString(165)) 
       } else { 
        $TempString = $TempString + ($IncomingText.SubString(155)) 
       } 
       return $TempString 
      } 
     } 
    } 
} 

In VBScript gibt es diese Case Else. Ich möchte in der "601" bleiben und mit dem nächsten Abschnitt fortfahren. Wie mache ich das in PowerShell? Seit Case Else scheint nicht für mich zu arbeiten.

+0

Vielen Dank! –

+0

Führen Sie keine 1-zu-1-Übersetzung Ihres VBScript in PowerShell durch, indem Sie nur die Syntax ändern. Überschreiben Sie es vollständig in herkömmlicher PowerShell. – alroc

+0

Haben Sie darüber geforscht? Wie überhaupt? Denn das sollte sofort das [VBScript-zu-Windows PowerShell Conversion Guide] (https://technet.microsoft.com/en-us/library/hh848796.aspx) mit [diesem kleinen Juwel] (https: // technet.microsoft.com/en-us/library/ee176957.aspx) (unter anderem). –

Antwort

4

von Windows Power Website Genommen https://technet.microsoft.com/en-us/library/ff730937.aspx

So Standard sonst statt Fall verwenden.

$a = 5 
switch ($a) 
{ 
    1 {"The color is red."} 
    2 {"The color is blue."} 
    3 {"The color is green."} 
    4 {"The color is yellow."} 
    5 {"The color is orange."} 
    6 {"The color is purple."} 
    7 {"The color is pink."} 
    8 {"The color is brown."} 
    default {"The color could not be determined."} 
} 
+0

Vielen Dank! –

4

Sie suchen default:

Switch ($something) { 
    1 { .. } 
    2 { .. } 
    default { .. } 
} 
2

Ich möchte darauf hinweisen, dass der Switch Befehl scriptblocks ähnlich einer If Anweisung auswertet, so dass Sie nur komplexere Fälle schaffen könnte:

switch($IncomingText) { 
    {$_.SubString(0,1) -eq '1' -and $IncomingText.SubString(12,3) -eq '601'} 
       { 
        $TempString = $IncomingText.SubString(0,75) 

        if (![string]::IsNullOrWhiteSpace($IncomingText.SubString(75,10))) { 
         $TempString = $TempString + (StrReverse($IncomingText.SubString(75,10))) + ($IncomingText.SubString(85,10)) 
        } else { 
         $TempString = $TempString + ($IncomingText.SubString(75,20)) 
        } 
       } 

    default  
       { 
        if (RemoveSpaces($IncomingText.SubString(155,10)) = True) { 
         $TempString = $TempString + (StrReverse($IncomingText.SubString(155,10))) + ($IncomingText.SubString(165)) 
        } else { 
         $TempString = $TempString + ($IncomingText.SubString(155)) 
        } 
        return $TempString 
       } 
} 

ich auch beachten, möchte, dass es wie Sie Leerzeichen aus einer 10 Zeichenkette werden entfernt aussieht, und testet, ob etwas zu sehen bleibt übrig. Wenn Sie diese 10 Zeichen umkehren, fügen Sie die nächsten 10 Zeichen hinzu, andernfalls fügen Sie einfach alle 20 Zeichen so hinzu, wie sie sind. Mein Punkt ist, dass, wenn die ersten 10 Zeichen alle Leerzeichen sind, das Umkehren derselben harmlos ist, also können Sie sie auch einfach immer umkehren. In diesem Sinne wird Ihr Code viel einfacher:

Function StrReverse ($MyString){ 
    $arrMyString = $MyString.ToCharArray() 
    [array]::Reverse($arrMyString) 
    $arrMyString -join '' 
} 

switch($IncomingText) { 
    {$_.SubString(0,1) -eq '1' -and $IncomingText.SubString(12,3) -eq '601'} 
       { 
        $TempString = $IncomingText.SubString(0,75) + (StrReverse $IncomingText.SubString(75,10)) + $IncomingText.SubString(85,10) 
       } 

    default  
       { 
        $TempString + (StrReverse $IncomingText.SubString(155,10)) + $IncomingText.SubString(165) 
       } 
} 
Verwandte Themen