PowerShell变量包含特定的数字

PowerShell变量包含特定的数字,powershell,Powershell,场景 当我的变量(称为$Numbers)包含0、1和2时,它将在第一个IF语句下运行任何内容。如果我的变量包含0、1、2和3,它将运行另一个If语句 问题 If ($Numbers -contains "*0,*" -and "*1,*" -and "*2,*") { Write-Host = "Does not contain 3" } Elseif ($Numbers -contains "*0,*" -and "*1,*" -and "*2,*" -and "*3,*") {

场景

当我的变量(称为$Numbers)包含0、1和2时,它将在第一个IF语句下运行任何内容。如果我的变量包含0、1、2和3,它将运行另一个If语句

问题

If ($Numbers -contains "*0,*" -and "*1,*" -and "*2,*") {

    Write-Host = "Does not contain 3"

}

Elseif ($Numbers -contains "*0,*" -and "*1,*" -and "*2,*" -and "*3,*") {

    Write-Host "Contains 3"

}
我似乎无法让它工作,因为它连续运行第一个IF语句(因为仍然包含0、1和2),但如果它不包含数字3,则从不跳过它

简要代码示例

If ($Numbers -contains "*0,*" -and "*1,*" -and "*2,*") {

    Write-Host = "Does not contain 3"

}

Elseif ($Numbers -contains "*0,*" -and "*1,*" -and "*2,*" -and "*3,*") {

    Write-Host "Contains 3"

}

欢迎提供任何指导。

反转if语句,首先测试0、1、2、3,然后在
Elseif
中测试0、1、2。您应该始终首先测试更具体的情况。

反转if语句,首先测试0、1、2、3,然后在
Elseif
中测试0、1、2。您应该首先测试更具体的情况。

您的测试语法错误

-Contains
将查找精确匹配,而不是通配符匹配,加上每个
-和
条件必须是独立测试,例如

If ($Numbers -contains 0 -and $Numbers -contains 1 -and $Numbers -contains 2)

“1”或“2”本身都是非空字符串,在没有对其应用任何类型的比较操作的情况下,它们的计算结果总是$true。

您的测试语法是错误的

-Contains
将查找精确匹配,而不是通配符匹配,加上每个
-和
条件必须是独立测试,例如

If ($Numbers -contains 0 -and $Numbers -contains 1 -and $Numbers -contains 2)

“1”或“2”本身都是非空字符串,在没有对其应用任何类型的比较操作的情况下,将始终计算为$true。

如果
$Numbers
是一个集合,请删除通配符。如果
$Numbers
是字符串,请使用
match
io
contains
。正如Maarten所说,在这两种情况下,请将语句颠倒过来。我真的希望看到$numbers是如何填充的或其确切内容。如果
$numbers
是一个集合,请删除通配符。如果
$Numbers
是字符串,请使用
match
io
contains
。在这两种情况下,正如马尔滕所说的那样,将声明颠倒过来。我真的很想看看$numbers是如何填充的或其确切内容。