4oo*_*oo4 3 syntax powershell conditional
我正在尝试编写一个检查操作系统主要版本的部署脚本,然后根据该命令运行命令.我可以抓住它[System.Environment]::OSVersion.Version.Major,但当我尝试在if/elseif语句中使用它时,我总是得到第一个条件,并且变量以某种方式变化.
所以我正在测试的代码就是这个(使用Windows 10机器):
$OS_VERSION=$([System.Environment]::OSVersion.Version.Major)
if ($OS_VERSION = 6) {
Write-Output "OS Version is $OS_VERSION"
# Do stuff...
} elseif ($OS_VERSION = 10) {
Write-Output "OS Version is $OS_VERSION"
# Do different stuff..
}
Run Code Online (Sandbox Code Playgroud)
我注意到,当我按预期运行条件的顺序时,更令人沮丧的是,该语句在Windows 7机器上运行得非常好.
这是Powershell的一个错误/怪癖我错过了,还是我做了一些愚蠢的事情?
The*_*le1 11
我以为我会写出来,因为我可以解释它比我的评论更好.输入表达式而不指定它时,它将输出到管道.在这种情况下
if ($OS_VERSION = 6) {
Run Code Online (Sandbox Code Playgroud)
是一个表达式(因为if语句计算表达式以获取要执行操作的布尔值).如果在交互式提示符下输入时将其包装在括号中,它将输出变量在分配变量的同时分配的内容,非常类似
6 | Tee-Object -Variable OS_VERSION
Run Code Online (Sandbox Code Playgroud)
会,或-PassThru切换一些cmdlet:
> ($Test = 6)
>> 6
> $Test
>> 6
Run Code Online (Sandbox Code Playgroud)
所以你在这里做的总是分配那个6评估的变量,true因为它if是真实的和非零的true.你需要的是-eq 比较运算符:
if ($OS_VERSION -eq 6) {
Run Code Online (Sandbox Code Playgroud)
可以从以下命令中找到更多信息:
Get-Help -Name about_Comparison_Operators
Run Code Online (Sandbox Code Playgroud)
PowerShell不用=作比较运算符.
如果要比较相等性,则运算符为-eq:
if ($OS_VERSION -eq 6) {
Write-Output "OS Version is $OS_VERSION"
# Do stuff...
} elseif ($OS_VERSION -eq 10) {
Write-Output "OS Version is $OS_VERSION"
# Do different stuff..
}
Run Code Online (Sandbox Code Playgroud)
这将纠正您的问题.你应该仔细看Get-Help -Name about_Comparison_Operators(或阅读链接).
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |