我最近将多个 .reg 文件合并为一个 .reg 文件,但在导入之前,我想在另一台机器上比较这些条目是否已经存在。
这有可能吗?我以前使用过注册表快照工具,但我想将实时注册表与具有多个条目的 reg 文件进行比较。
答案1
Win使用-在目标 PC 上打开注册表编辑器R
,然后使用文件 | 导出 | 全部将所有内容导出为您选择的文件名。.REG
扩展名是可以接受的,因为 .REG 文件是纯文本。
关闭注册表编辑器,然后运行差分,一款开源比较工具。打开两个文件进行比较;默认情况下,差异将以紫色显示。
答案2
我知道这是一篇旧帖子,但我希望它能对某些人有所帮助。
我需要能够使用 PowerShell 将 .reg 文件与注册表中的当前值进行比较,但我遇到的问题是,导出用于比较的注册表项并不总是按照我想要比较的 .reg 文件中的顺序导出它们。因此,这些文件可能实际上是相同的,但对原始文件进行字符串比较显示它们是不同的。虽然一些高级 GUI 工具可能能够对其进行分类并进行比较,而不管 .reg 文件中注册表项的顺序如何,但这在像我尝试的那样进行自动化时没有帮助。
在 PowerShell 中尝试了相当多的方法之后,我找到了一个非常有效的解决方案:
$liveKey = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\' #The live key you want to compare
$livePath = 'C:\temp\live.reg' #Temporary location for the exported reg file
$compareToPath = 'C:\temp\compareTo.reg' #The .reg file to compare to
REG EXPORT $liveKey $livePath
$compareToFile = ((Get-Content $compareToPath -Raw) -split "`r`n`r`n" | Sort-Object) -join "`r`n`r`n"
$liveFile = ((Get-Content $livePath -Raw) -split "`r`n`r`n" | Sort-Object) -join "`r`n`r`n"
$liveFile -eq $compareToFile #This will return True if they are the same, $false if they are different.
如果您想查看具体的差异,请不要重新加入数组并使用 Compare-Object:
$liveKey = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\' #The live key you want to compare
$livePath = 'C:\temp\live.reg' #Temporary location for the exported reg file
$compareToPath = 'C:\temp\compareTo.reg' #The .reg file to compare to
REG EXPORT $liveKey $livePath
$compareToFile = (Get-Content $compareToPath -Raw) -split "`r`n`r`n" | Sort-Object
$liveFile = (Get-Content $livePath -Raw) -split "`r`n`r`n" | Sort-Object
Compare-Object $liveFile $compareToFile #The output isn't pretty so if you need to know specific differences, you'll have to play with it a bit to get what you want
重点是这两行:
$compareToFile = ((Get-Content $compareToPath -Raw) -split "`r`n`r`n" | Sort-Object) -join "`r`n`r`n"
$liveFile = ((Get-Content $livePath -Raw) -split "`r`n`r`n" | Sort-Object) -join "`r`n`r`n"
基本上,我们在这里所做的就是将 .reg 文件作为单个字符串读取,在有两个换行符的地方将其拆分为一个数组(.reg 导出的键之间总是有两个换行符),对数组进行排序,然后将其重新合并为一个字符串。然后,由于两个字符串的排序方式相同,因此比较只是简单的字符串比较。
答案3
从“实时注册表”到导出的 .reg 文件只需一步即可轻松完成。
从那里开始,比较就很简单了。
“实时”注册表和导出的 .reg 文件之间没有实质性差异,因此,除非您有独特且令人信服的理由不为了更容易比较而导出,否则没有必要执行此额外步骤。
要在命令行或自动化过程中使用它,请使用reg export
创建导出文件,然后使用 PowerShellCompare-Object
进行比较。