Win10 Powershell-简单的If / Elseif是否取决于条件顺序?

时间:2018-07-25 16:49:06

标签: powershell syntax conditional

我正在尝试编写一个部署脚本,该脚本检查OS主版本,然后基于该主版本运行命令。我可以用for (int j = 0; j < jsonArray.length(); j++) { JSONObject object = jsonArray.getJSONObject(j); // j represents the size of sub_cat. ^^ ... } 抓住它,但是当我尝试在if / elseif语句中使用它时,我总是得到第一个条件,并且变量会以某种方式改变。

所以我要测试的代码是这样的(使用Windows 10计算机):

[System.Environment]::OSVersion.Version.Major

我注意到,当我切换条件的顺序时,它按预期运行,甚至更令人沮丧的是,该语句在Windows 7计算机上运行得很好。

这是我缺少的Powershell的错误/怪癖,还是我做的蠢事?

2 个答案:

答案 0 :(得分:11)

我认为我会写出来,因为我能比我的评论更好地解释它。当您输入一个表达式而不分配它时,它将输出到管道。在这种情况下

if ($OS_VERSION = 6) {

是一个表达式(因为if语句计算表达式的布尔值以采取行动)。如果在交互式提示下输入时将其包装在括号中,它将输出变量在分配变量的同时分配的内容,就像

6 | Tee-Object -Variable OS_VERSION

或者在某些cmdlet上使用-PassThru开关:

> ($Test = 6)
>> 6
> $Test
>> 6

因此,您在这里所做的就是总是将该变量分配给6,该变量的值为true,因为if是真实的,非零是{ {1}}。您需要的是true 比较运算符

-eq

可以从以下命令中找到更多信息:

if ($OS_VERSION -eq 6) {

答案 1 :(得分:5)

PowerShell不使用dask作为比较运算符。

如果要比较相等性,则运算符为=

-eq

这将纠正您的问题。您应该仔细查看read_csv(或阅读链接)。

相关问题