2011-06-09 497 views
3

我需要導入包含服務器產品標準配置設置的.reg文件。但是,單個Windows框可能包含多個服務器實例。每個服務器實例在Windows註冊表中都有自己的配置密鑰。使用PowerShell導入腳本修改的.reg文件?

的第一個實例將具有默認的註冊表項:

HKLM\SOFTWARE\<Vendor>\<Product>\Settings 

其他任何情況下都會有不同名稱,如:

HKLM\SOFTWARE\<Vendor>\<Product>\Settings-foo 
HKLM\SOFTWARE\<Vendor>\<Product>\Settings-bar 
HKLM\SOFTWARE\<Vendor>\<Product>\Settings-baz 

等等

註冊表文件包含需要應用於每個這些服務器實例的設置。註冊表子鍵的結構在每個鍵中都是相同的。因此,手動部署過程是採用.reg文件併爲"SOFTWARE\<Vendor>\<Product>\Settings\"執行文件搜索和替換,並將其替換爲"SOFTWARE\<Vendor>\<Product>\Settings-foo\",然後導入新調整的.reg文件。沖洗&重複吧,巴茲等

我想要做的是編寫一個PowerShell腳本獲取所有「設置」鍵的列表,並在導入.reg文件之前執行等效的搜索和替換。我還沒有找到一個可以導入.reg文件的cmdlet,所以我想我必須調用reg.exe或regedit.exe。這兩種程序都允許您導入磁盤上的.reg文件的內容。

我的問題是,我是否真的必須創建.reg文件並將它們寫入磁盤,然後才能撥打reg.exe /Import <filename>regedit.exe /S <filename>?或者有什麼方法可以加載原始.reg文件,在內存中修改它,並獲取reg.exe或regedit.exe來導入修改的註冊表項,而無需將整個.reg文件寫入磁盤?

+1

不是一個真正的回答你的問題,但你考慮過沒有使用的.reg文件,但使用PowerShell腳本有修改註冊表? – 2011-06-09 07:42:09

+1

嗨拉爾斯。有幾個原因可以使用。reg文件: 1)將腳本邏輯從配置中分離出來(這樣就可以發佈新版本的reg文件,而無需修改和重新簽署部署腳本) 2)不需要重新發明輪子以一種新的方式來存儲與Regedit不兼容的註冊表信息。3)繼續支持基於reg文件的現有基礎架構。 4).reg文件爲沒有PowerShell的傳統機器提供配置機制,並且我不想維護兩組配置。 – Hydrargyrum 2011-06-09 08:01:17

回答

5

據我所知,基本的PowerShell Cmdlet根本不使用.reg文件。

因此,一方面您可以修改您的reg文件並將其應用於REG.EXE。另一方面,您可以使用PowerShell註冊表提供程序'Item'CMdlets來修改您的註冊表。

1

您可以在內存中創建reg命令,並執行這些命令而不訴諸臨時文件。即,構造REG ADD像這樣的命令,

reg add \\reg-path /v value-name /f /t type-name /d value-data

這將增加或與值數據作爲數據到註冊表路徑REG-路徑覆蓋值值名稱。

在Powershell循環中創建這樣的命令應該不會太難。

0

所以,你可以做兩種方式:

$Reg = get-itemproperty hkcu:\environtment\path #This will get all the keys in a path 
$Reg.key1 = [int32]1 
$Reg.key2 = [string]somevalue 
set-item hkcu:\environment\path $Reg 

OR

$Reg = @" 
Windows Registry Editor 5.00 

[HKEY_CURRENT_USER\environment\path] 
"key1"=dword:00000001 
"key2"="somevalue" 
"@ 

$reg | Out-file registry.reg 
regedit /s registry.reg