比较 Powershell 中的变量

问题描述 投票:0回答:1

好的。所以我认为这很容易,但我遇到了障碍。

$var = (Get-ItemProperty "HKCU:\SOFTWARE\SAP\General" -Name "BrowserControl")."BrowserControl"
$var2 = "HKCU:\SOFTWARE\SAP\General"
$var3 =  @('1','0')
#if (($var -eq ($var3 -join'')))
#if (Compare-Object -IncludeEqual $var $var3 -SyncWindow 0)
if ($var -eq $var3)
{
    Write-Output "Registry hive exists"
    exit 1
}   
else 
{
    Write-Output "Registry hive doesn't exists"
    #New-ItemProperty -Path $var2 -name "BrowserControl" -Value "1" -PropertyType "DWORD" -Force | Out-Null
    
} 

如果从 BrowserControl 返回 1 或 0,我希望它是匹配的。如果返回任何其他内容,则不匹配。 如果 BrowserControl 设置为 1,则可以正常工作。如果它设置为 0 或 1 以外的任何数字,则不匹配。 我知道我可以使用 else-if 并添加几行代码,但我真的想让它发挥作用。 正如你所看到的,我尝试了不同的比较方法。我还尝试了 var3 的 (0,1), ('0','1'), 0,1 。这些都不起作用。 那么...我错过了什么?

powershell variables equality
1个回答
2
投票

您无法有意义地将 array 用作 -eq 运算符

RHS(右侧)。[1]

但是,PowerShell 有专用运算符,用于测试给定的单个值是否包含在集合中(更准确地说:等于集合的元素之一),即

-in
及其操作数反转对应项,
-contains

在这种情况下,

-in
可以使代码更具可读性:

if ($var -in $var3) # ...

[1] PowerShell 悄悄地接受一个数组(集合)作为 RHS,但是 - 无用地 - 通过默认情况下用单个空格连接元素来字符串化它。例如,

'1 2' -eq 1, 2
产生
$true

相比之下,使用数组作为 -eq
is
LHS 是有意义的:RHS 标量然后充当 filter,返回相等 LHS 元素的 sub-array;例如
1, 2, 3, 2 -eq 2
返回
2, 2

© www.soinside.com 2019 - 2024. All rights reserved.