2012-11-02 99 views
3

我試圖更新一組註冊表項,一組屬性需要根據舊值更新爲新值。使用PowerShell搜索並替換註冊表項值

我嘗試使用以下內容:

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

但是uri屬性的值設置爲:{ $_.Value -Replace ".mydomain.com/", ".mynewdomain.com/" }

我想:

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

而且

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

但是,這清除了價值。

我想用盡可能少的行更新多個鍵中的多個註冊表值。我已經通過導出註冊表來實現它,使用記事本來搜索和替換,然後重新導入註冊表項,但這就​​像是作弊。我真的想知道如何使用Powershell來實現這一點。

我試過的其他東西:$(...)(...),省略-Value選項,你把它命名爲:S。

我試圖用$_.Uri$_代替$_.Value,也沒有工作。

現在問題已經解決,答案用於指導how to update your TFS project collection settings for the new Team Foundation Services

+1

嘗試更改'()'中的'{}'爲'-Value'值。 –

+0

@Christian試過,沒有骰子。將值設置爲「」 – jessehouwing

+1

和$ _。Value.Replace(「.mydomain.com」,「.mynewdomain.com」)? –

回答

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

謝謝!那就是訣竅,所以我想%{...}在執行前評估內容。 – jessehouwing

+2

不,這意味着foreach,Get-ItemProperty可能會管道屬性列表。用foreach,我們可以單獨操作每個項目。 $ _代表每個管道項目,並且您應該使用$ _。Uri獲取值而不是$ _。Value。你可以輸入Get-ItemProperty -Path HKCU:\ Software \ xxxxx \ *。mydomain.com Uri |佛羅里達州看到的關鍵和價值觀。 – Jackie