2014-10-28 3 views
1

у меня есть это, что не работает:

$var1 = "6.0.6001" 
$var2 = "6.1.7001" 
$var3 = "6.2.8074" 
$var4 = "6.3.8074" 
if($var1 -match "6.1.?" -or "6.2.?" -or "6.3.?") { 
    write-host "1" 
}else{ 
    write-host "2" 
} 

Независимо от того, что, 1 возвращается.

Что должно быть на самом деле?

Спасибо.

ответ

0

Выполнить этот код:

if("6.2.?" -or "6.3.?") { 
    write-host "1" 
}else{ 
    write-host "2" 
} 

Это не будет также возвращать 1 независимо от того, что.

Изменить ваше условие:

if($var1 -match "6.1.?" -or $var1 -match "6.2.?" -or $var1 -match "6.3.?") 

Или еще лучше:

if($var1 -match "6.[1-3].?") 
0

Просто уточнить ответ Адама. Вы If заявление не работает, как предполагалось, поскольку PowerShell видел только три условия, которого не намерены

if($var1 -match "6.1.?" -or "6.2.?" -or "6.3.?") 
if(($var1 -match "6.1.?") -or ("6.2.?" -or "6.3.?")) 

Две строки выше функции же. Чтобы разбить вторую операцию ("6.2.?" -or "6.3.?") немного больше: строка с ненулевой длиной, преобразованная в boolean, всегда будет $true. Сравнение двух строк, отличных от нуля, с -or всегда будет возвращаться $true. Первый пункт ($var1 -match "6.1.?") в вашем примере - $false. If($true -or $false) - это, по сути, то, что ваш If заявление сводится к тому, что, опять же, всегда будет возвращаться $true. Ответ Adams показывает, как получить логику, которую вы ищете

if($var1 -match "6.1.?" -or $var1 -match "6.2.?" -or $var1 -match "6.3.?") 
if(($var1 -match "6.1.?") -or ($var1 -match "6.2.?") -or ($var1 -match "6.3.?")) 

Оба вышеуказанных утверждения одинаковы. Второй помогает понять логику. Для получения дополнительной информации см. about_Logical_Operators. Вам нужны только скобки, когда логика не действует так, как вы этого хотите.

Смежные вопросы