Powershell:无法更新注册表路径,因为它不存在(但实际上存在)

Ari*_*oth 3 powershell internet-explorer azure-pipelines azure-pipelines-release-pipeline

我们正在 Windows 8.1 中的 IE 上运行编码 UI 测试,并且我们通过 Visual Studio Team Services 进行测试。作为我们构建的一部分,我们运行了一个禁用弹出管理器的 Powershell 脚本。我们用来禁用它的代码是这样的:

Remove-ItemProperty "HKCU:\Software\Microsoft\Internet Explorer\New Windows" -Name "PopupMgr"
New-ItemProperty "HKCU:\Software\Microsoft\Internet Explorer\New Windows" -Name "PopupMgr" -Value 00000000 -PropertyType "DWord"
Run Code Online (Sandbox Code Playgroud)

当我在 Release Manager 中创建和部署构建时,运行它会生成以下错误:

运行命令停止,因为首选项变量“ErrorActionPreference”或公共参数设置为停止:找不到路径“HKCU:\Software\Microsoft\Internet Explorer\New Windows”,因为它不存在。

(强调我的)

我已经登录到 VM 并查看了注册表,并且HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\New Windows绝对存在。我唯一能想到的是它的值不是 DWORD 而是字符串——PopupMgr键的数据值为“是”而不是 1 或 0。但这与错误消息不匹配——错误说它甚至找不到键的路径,而不是值类型不匹配。另外,代码在插入新密钥之前删除了现有密钥,所以我什至不知道它是如何注意到不匹配的。

更奇怪的是,如果我在 VM 中打开 Powershell 并运行那两行(我复制并粘贴以避免输入错误),它们运行得很好。

这个脚本在 Windows 10 上运行得很好并且已经有一段时间了,所以我不确定这里发生了什么。用户是管理员组的成员,所以我认为这不是权限问题。

任何人都可以对此有所了解吗?

Ran*_*tta 5

我认为您正在尝试添加注册表项属性值 您需要测试注册表项是否存在。如果注册表项不存在,则需要创建注册表项,然后创建注册表项属性值。

您应该创建注册表项的路径,然后指定要分配的属性名称和值。这包括三个变量,如下所示:

这应该可以帮助您:

$registryPath = "HKCU:\Software\Microsoft\Internet Explorer\New Windows"

$Name = "PopupMgr"

$value = "00000000"

IF(!(Test-Path $registryPath))

  {

    New-Item -Path $registryPath -Force | Out-Null

    New-ItemProperty -Path $registryPath -Name $name -Value $value `

    -PropertyType DWORD -Force | Out-Null}

 ELSE {

    New-ItemProperty -Path $registryPath -Name $name -Value $value `

    -PropertyType DWORD -Force | Out-Null}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。