Search code examples
powershellinternet-explorerazure-pipelinesazure-pipelines-release-pipeline

Powershell: Can't update a registry path because it doesn't exist (but it actually exists)


We are running Coded UI tests on IE in Windows 8.1, and we're doing it through Visual Studio Team Services. As part of our build, we run a Powershell script that disables the popup manager. The code we use to disable it is this:

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"

When I create and deploy a build in Release Manager, running this generates the following error:

The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: Cannot find path 'HKCU:\Software\Microsoft\Internet Explorer\New Windows' because it does not exist.

(Emphasis mine)

I've logged onto the VM and looked at the registry, and HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\New Windows absolutely exists. The only thing I can think of is that its value isn't a DWORD but rather a string -- the PopupMgr key has a Data value of "yes" rather than 1 or 0. But that doesn't match the error message -- the error says it can't even find the path of the key, not that the value type is a mismatch. Plus, the code removes the existing key before inserting a new one, so I don't even know how it would notice the mismatch.

Even weirder, if I open Powershell inside the VM and run those exact two lines (I copied and pasted to avoid typos), they ran just fine.

This script worked on Windows 10 perfectly and has for a while, so I'm unsure what's going on here. The user is a member of the Administrators group, so I don't think it's a permissions issue.

Can anyone shed some light on this?


Solution

  • I think you are trying to add the Registry key Property Value You need to test for the existence of the registry key. If the registry key does not exist, then you need to create the registry key, and then create the registry key property value.

    You should create the path to the registry key, then specify the property name and the value you want to assign. This consists of three variables as shown here:

    This should help you out:

    $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
        }