Registry Key Exist True of False 输出

Registry Key Exist True of False Output

我有一个简单的强大 shell 脚本,我正在尝试 运行。该脚本基本上会检查 RegKey 和 return 输出为 0 或 1 的值是否存在。

我遇到的问题是我的测试结果不一致。前任。 Reg 键不存在并且脚本被执行正确的值为 returned,0。我手动将键添加到注册表并且 运行 脚本再次期望 Write-Output 为 1 但 0 是return正在编辑什么。现在,如果我将 if 语句中的参数从 $null 更改为类似 $false 的参数,那么正确的输出将被 returned,直到我返回并重复我的测试过程。我希望有人有时间看看我写的东西并指出正确的方向。

New-PSDrive -PSProvider registry -Root HKEY_CLASSES_ROOT -Name HKCR
Test-Path -Path 'HKCR:\Installer\UpgradeCodesDD538593C91FA40B60EB02250187C0*'
if($path -eq $null) {Write-Output 0}
else
{Write-output 1} 
 remove-psdrive -name HKCR
  • Test-Path,与 PowerShell 中的所有 Test-* cmdlet 一样,returns 一个 布尔值 值,$true$false,因此您不应将其与 $null 进行比较;相反,只需在 条件 .

  • 中按原样使用它
  • 无需创建 PowerShell 驱动器即可访问 HKEY_CLASSES_ROOT 配置单元[1];您可以简单地 使用 registry:: PS 提供商前缀来访问本机注册表路径 .

因此:

if (Test-Path -Path registry::HKEY_CLASSES_ROOT\Installer\UpgradeCodesDD538593C91FA40B60EB02250187C0*) {
  1  # same as: Write-Output 1
}
else {
  0  # same as: Write-Output 0
}

相反,如果您想获取通配符表达式匹配的特定键,请使用Get-Item:

$path = Get-Item -Path registry::HKEY_CLASSES_ROOT\Installer\UpgradeCodesDD538593C91FA40B60EB02250187C0*
if ($null -eq $path) {  # Always place $null on the LHS
  'not found'
}
else {
  'found at least one'
}

[1] 请注意 HKEY_CLASSES_ROOT 实际上是两个不同注册表子树的 复合 视图:机器级 HKEY_LOCAL_MACHINE:\Software\Classes 和用户级别 HKEY_CURRENT_USER:\Software\Classes。也就是说,您会在 HKEY_CLASSES_ROOT 中看到来自这些子树的键的 union;如果注册表 存在于 两个 位置,则 HKEY_CURRENT_USER 值优先。