我需要导入一个包含服务器产品标准配置设置的.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>
答案 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