2016-12-29 2 views
1

Die folgenden if-Anweisungen mit -ne und -oder Operatoren funktioniert nicht (Hinweis, ich habe die Klammern nicht enthalten). $ MyVariable ist eine Ganzzahl, die von einem Parameter in einer Funktion kommt und mit der if-Anweisung den Wert überprüft. Was ich will ist, wenn $ MyVariable ist nicht gleich 16, 24 oder 32 dann Rückkehr mit Fehlermeldung ansonsten weiter. Aufruf der Funktion als FunctionName 16; im Skript ps1.Wenn mit -ne und -oder Operatoren nicht in Powershell arbeiten

Funktion ist wie folgt definiert:

function FunctionName 
{ 
    param([Parameter(Mandatory = $false, Position = 0)] 
      [AllowNull()] 
      [int] $MyVariable, 
      [Parameter(Mandatory = $false, Position = 1)] 
      [bool] $MyVariable2, 
      [Parameter(Mandatory = $false, Position = 2)] 
      [bool] $MyVariable3); 
    if (... 
} 

Was soll ich folgende if-Anweisungen falsch in das tun?

if ($MyVariable -ne 16 -or $MyVariable -ne 24 -or $MyVariable -ne 32)... 
if (16 -ne $MyVariable -or 24 -ne $MyVariable -or 32 -ne $MyVariable)... 
if (($MyVariable -ne 16) -or ($MyVariable -ne 24) -or ($MyVariable -ne 32))... 
+2

Logik fla w. * Mindestens zwei * der '-ne'-Vergleiche sind immer wahr. Verwenden Sie '-and' statt oder' -eq' für den Vergleich –

+1

Ja. Nach erneuter Betrachtung der Logik macht es Sinn. Vielen Dank. –

Antwort

2

Wenn einer der drei Gleichheitsvergleiche $false zurückkehren, die beiden anderen müssen true zurück (wenn $x 16 gleich wird es nie gleich 24 oder 32), und so die Erklärung wird immer bewerten zu $true.

ändern -or--and für alle drei Fälle testen:

if ($MyVariable -ne 16 -and $MyVariable -ne 24 -and $MyVariable -ne 32){} 

oder ob es eher als nicht gleich ist:

if ($MyVariable -eq 16 -or $MyVariable -eq 24 -or $MyVariable -eq 32){} 

oder verwenden Sie die stattdessen -contains Betreiber:

if (@(16,24,32) -contains $MyVariable){} 
Verwandte Themen