PowerShell Get-ItemProperty 在注册表中找不到 DWORD

PowerShell Get-ItemProperty not finding DWORD in registry

我正在尝试创建一个脚本,首先检查注册表中是否有密钥,如果没有;创建它。

$path = "HKCU:\Software\Microsoft\Office.0\Common\Identity\"
$regkey = "Testkey"
$keyvalue = "0"

if ((Get-ItemProperty $path -Name $regkey -ea 0).$regkey) {
    "Property already exists"
} else {
    Set-ItemProperty -Path $path -Name $regkey -Value $keyvalue
    Write-Output "Created key."
}

我的期望:

会发生什么:

基本上,出于某种原因,我无法编写脚本来发现 DWORD 类型的键。

问题在于您检查注册表值是否存在的方式。您正在获取值,扩展其数据,然后让 PowerShell evaluate the data 在布尔上下文中。在该上下文中,数值 0 的计算结果为 $false,但字符串值“0”的计算结果为 $true,因为它是一个非空字符串。同样,非零数值的计算结果为 $true,字符串 "" 的计算结果为 $false.

要解决此问题,您需要检查注册表查找是否确实 returns 非空结果:

if ((Get-ItemProperty $path -Name $regkey -EA 0).$regkey <b>-ne $null</b>) {
    "Property already exists"
} else {
    Set-ItemProperty -Path $path -Name $regkey -Value $keyvalue
    Write-Output "Created key."
}