我正在尝试为各种软件应用程序导出选择性注册表项,首选项和配置,然后将它们导入到新计算机上。
Get-ChildItem Registry::HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\OneNote -Recurse | Export-Clixml -Depth 3 -Path OneNote.xml
然后使用
在另一台机器上反转此过程Import-CliXml -Path OneNote.xml | Set-Item
这似乎不起作用,但原因并不明显。从概念上讲,感觉好像这样的东西应该有效。
理想情况下,下一步是能够获取密钥,过滤它们并将它们全部存储在一个文件中,然后在另一台机器上干净地恢复它们。
这可以通过regedit完成,但我很好奇PowerShell是如何完成的。
如果密钥不存在并设置其值,则Import-CliXml
命令不会创建密钥,而是在与密钥路径对应的密钥中的默认属性名称下创建值。例如:
在目标计算机上,目标密钥如:
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\OneNote\OpenNoteBooks
现在将包含一个默认项目,其值为:
"HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\OneNote\OpenNoteBooks"
而不是源键的预期属性。
对于背景,在基本层面,我希望通过以下方式完成:
reg export HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\OneNote OneNote.reg
要创建包含键值的注册表文件,那么。
reg import OneNote.reg
在目标计算机上加载它们。显然,这对于简单的转储和恢复很容易。但是,如果希望首先使用某些逻辑来处理它们的键,那么它的灵活性就会降低。
答案 0 :(得分:1)
有几个原因导致这种情况不能按预期发挥作用。
首先在Set-Item
documentation备注部分中说明:
在注册表驱动器,HKLM:和HKCU:中, Set-Item更改注册表项(默认)值中的数据。要创建和更改注册表项的名称,请使用New-Item和Rename-Item。要更改注册表值中的名称和数据,请使用New-ItemProperty,Set-ItemProperty和Rename-ItemProperty。
因此,我们注定要注意这一点,因为你没有直觉地思考。
其次,如果您查看Import-CliXml -Path OneNote.xml
的输出,则不会提供注册表值类型信息,例如DWORD
,QWORD
等,因此使用此作为输入的任何工具都不会知道如何正确构造键值,因为没有类型提示。
你最好坚持使用好的reg.exe
工具。它的行为已得到充分证明和可预测。如果你需要在整个过程中调整一些值,那么解析.reg
文件也不算太难。