Search and replace registry entry value using powershell

powershell, registry, replace

Solution

Get-ItemProperty -Path HKCU:\Software\xxxxx\*.mydomain.com Uri | %{set-itemproperty -Path $_.PSPath Uri -Value ( $_.Uri -Replace ".mydomain.com/", ".mynewdomain.com/" )}

Problem

I'm trying to update a set of registry keys, a set of properties need to be updated with a new value based on the old value. I tried using the following: ``` Get-ItemProperty -Path HKCU:\Software\xxxxx\*.mydomain.com Uri | set-itemproperty -Path { $_.PSPath } Uri -Value { $_.Value -Replace ".mydomain.com/", ".mynewdomain.com/" } ``` But that sets the value of the uri property to: `{ $_.Value -Replace ".mydomain.com/", ".mynewdomain.com/" }` I tried: ``` Get-ItemProperty -Path HKCU:\Software\xxxxx\*.mydomain.com Uri | set-itemproperty -Path { $_.PSPath } Uri -Value ${ $_.Value -Replace ".mydomain.com/", ".mynewdomain.com/" } ``` And ``` Get-ItemProperty -Path HKCU:\Software\xxxxx\*.mydomain.com Uri | set-itemproperty -Path { $_.PSPath } Uri -Value ( $_.Value -Replace ".mydomain.com/", ".mynewdomain.com/" ) ``` But that clears the value. I want to update multiple registry values in multiple keys with as few lines as possible. I already got it working by exporting the registry, use notepad to search and replace and then re-import the registry entries, but that felt like cheating. I really want to know how I can achieve this using Powershell. Other things I've tried: `$(...)`, `(...)`, omitting the `-Value` option you name it :S. I tried replacing `$_.Value` with `$_.Uri` and `$_`, didn't work either. The problem is now resolved and the answer used to give guidance on how to update your TFS project collection settings for the new Team Foundation Services.

Original source