好的。所以我认为这很容易,但我遇到了障碍。
$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 。这些都不起作用。 那么...我错过了什么?
您无法有意义地将 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