比较注册表与 .reg 文件

比较注册表与 .reg 文件

我最近将多个 .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进行比较。

相关内容