嗨我有不同的想法让我的脚本工作:
即使powershell版本高于4
,它仍然会在第一次写入输出上失败。它仅在我删除And $winver -eq $os1 -or $os2 -or $os3
时有效。
否则它会一直告诉我我的powershell版本需要升级。我现在在V5上,$PSVersionTable.PSVersion.Major
确实说5
。
我做错了什么?
$winver = (Get-WmiObject -class Win32_OperatingSystem).Caption
$powershellversion = $PSVersionTable.PSVersion.Major
$os1 = "Microsoft Windows 7 Professional"
$os2 = "Microsoft Windows 10 Pro"
$os3 = "Microsoft Windows 10 Enterprise"
if($winver -ne ($os1, $os2, $os3) -contains $winver){
Write-Host "Bitlocker not supported on $winver"
Exit 0
}
if($powershellversion -lt 4){
Write-Host "Upgrade Powershell Version"
Exit 1010
}
else
{
$bitlockerkey = (Get-BitLockerVolume -MountPoint C).KeyProtector.RecoveryPassword
$pcsystemtype = (Get-WmiObject -Class Win32_ComputerSystem).PCSystemType
if ($pcsystemtype -eq "2"){
$setsystemtype = "Laptop"
}
else {
$setsystemtype = "Desktop"
}
if ($setsystemtype -eq "laptop" -And $bitlockerkey -eq $null -and ($os1, $os2, $os3) -contains $winver){
Write-Host "$setsystemtype without bitlocker"
Exit 1010
}
if ($setsystemtype -eq "desktop" -And $bitlockerkey -eq $null -and ($os1, $os2, $os3) -contains $winver){
Write-Host "$setsystemtype without bitlocker"
Exit 0
}
if ($winver -eq ($os1, $os2, $os3) -contains $winver){
Write-Host "$bitlockerkey"
Exit 0
}
}
答案 0 :(得分:2)
让我们看看它实际上做了什么:
someIcon.setText(someText.setText("someOtherString"))
这里的主题是Operator Precedence,具体来说,在评估一行代码时会发生什么,第二,第三等情况会发生什么。就像在代数数学中一样,在公式的一部分周围添加parens会改变你读取它的顺序。
所以,你可以乱用parens让你的逻辑工作:
if ($powershellversion -lt 4 -And $winver -eq $os1 -or $os2 -or $os3) { ... }
换句话说
if($powershellversion -lt 4 -and ( ($winver -eq $os1) -or ($winver -eq $os2) -or ($winver -eq $os3) ))
),$powershellversion -lt 4
-and
。 或者,您可以通过将os变量放入数组中来重新排列逻辑,并查看( ($winver -eq $os1) -or ($winver -eq $os2) -or ($winver -eq $os3) )
是否在其中:
$winver
编辑:或
if($powershellversion -lt 4 -and $winver -in ($os1, $os2, $os3)) { ... }
向后兼容v2.0。