使用PowerShell导入脚本修改的.reg文件?

时间:2011-06-09 06:50:51

标签: powershell registry

我需要导入一个包含服务器产品标准配置设置的.reg文件。但是,单个Windows框可能包含多个服务器实例。每个服务器实例在Windows注册表中都有自己的配置密钥。

第一个实例将具有默认注册表项:

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文件。冲洗&amp;重复吧,巴兹等。

我想要做的是编写一个PowerShell脚本,该脚本获取所有“Settings-”键的列表,并在导入.reg文件之前执行等效的搜索和替换。我还没有找到可以导入.reg文件的cmdlet,所以我想我必须调用reg.exe或regedit.exe。这两个程序都允许您导入磁盘上的.reg文件的内容。

我的问题是,我是否真的必须创建.reg文件并将其写入磁盘,以便我可以调用reg.exe /Import <filename>regedit.exe /S <filename>?或者有什么方法我可以加载原始.reg文件,在内存中修改它,并获取reg.exe或regedit.exe导入修改后的注册表项,而无需将整个堆栈的.reg文件写入磁盘? / p>

3 个答案:

答案 0 :(得分:5)

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

因此,一方面,您可以修改您的reg文件并将其应用于REG.EXE。另一方面,您可以使用PowerShell注册表提供程序和“项目”CMdlets来修改您的注册表。

答案 1 :(得分:1)

您可以在内存中创建reg命令,并在不使用临时文件的情况下执行这些命令。也就是说,构造reg添加命令,如此,

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

将使用value-data作为数据添加或覆盖值value-name到注册表路径reg-path中。

在Powershell循环中创建这样的命令不应该太难。

答案 2 :(得分: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