- 帖子
- 1013
- 积分
- 1228
- 技术
- 14
- 捐助
- 0
- 注册时间
- 2019-2-20
|
[问题求助] 使用Powershell将注册表内容改为特定格式
本帖最后由 5i365 于 2022-5-6 08:56 编辑
我从系统注册表中将某个软件的一些数据导出为了一个文件,文件名为 Test.reg
在这个文件中,包含很多类似hash表形式的键和值, 我想改变一下表达的格式
想按hash表来处理, 但是无从下手, 期待高手指引一下, 提前感谢
百度了一些资料, 说是导出的注册表里面,就是ini文件的键值对, 但是powershell好像没有处理ini文件的相关函数, 估计只能用万能的正则了
__________________________________________________________________________________________________________________________
总结了一下, 导出的注册表文件中:
键值的前面一行是其所在的路径, 是用[xxx\xxx\xxx]括起来的, 第一个 \ 之前是根路径, 之后是具体路径
表达方式改为: 在其前面加个;分号就可以了注意: 路径可能有多个, 路径下方的键值,在表达时,要使用其所在的 根路径 和 具体路径 的值
--------------------------------------------------------------
键值大致分为三大类型:
1.字符串类型, 为了方便区分, 这个类型就定义为 T
这种类型的特点是 = 后跟着"" 引号里面就是值
要改成的格式为:
T 键名="键值"
set 键名 "键名" "具体路径" 根路径
A.键值有时会为空,例如下面例子中的t1,此时就用""表达
B.键值有时会多行还可能会有空行,例如下面例子中的t4,要表达方式如下:
所有行写在=的下面, 且每行前有一空格,如下所示
T 键名=
第一行字符
第三行字符
第五行字符
--------------------------------------------------------------
2.数字类型, 为了方便区分, 这个类型就定义为 D
这种类型的特点是 = 后跟着dword: 冒号后面就是值,要表达方式如下:
D 键名=键值
set 键名 "键名" "具体路径" 根路径
--------------------------------------------------------------
3.十六进制类型, 为了方便区分, 这个类型就定义为 H
这种类型的特点是 = 后跟着hex: 冒号后面就是值,要表达方式如下:
H 键名
键名.str(1 "键值")
set 键名 "键名" "具体路径" 根路径
键值有多行时: 把多行拼成一行,并删除\ 把逗号改为空格, 例如下面例子中的h2:
______________________________________________________________________________________
Test.reg文件内容:
[HKEY_CURRENT_USER\Software\A\B\C]
"t1"=""
"d1"=dword:064
"h1"=hex:20,01,00
"t2"="C:\\a\\b.txt"
"t3"="C:\\c d\\e\\"
"d2"=dword:01
"h2"=hex:02,0c,\
00,00,00,00,\
00,00,00,00,\
00,00,00
"t4"="a,,0x0
b,,0x2
c,,0x5
"
[HKEY_LOCAL_MACHINE\Software\D\E\F]
"d1"=dword:064
"h1"=hex:20,01,00
"t3"="C:\\c d\\e\\"
"t4"="aa,,0x9
bb,,0x5
cc,,0x7
"
_________________________________________________________________________________
期待转换为下面的格式:
;[HKEY_CURRENT_USER\Software\A\B\C]
T t1=""
set t1 "t1" "Software\A\B\C" HKEY_CURRENT_USER
D d1=064
set d1 "d1" "Software\A\B\C" HKEY_CURRENT_USER
H h1
h1.str(1 "20 01 00")
set h1 "h1" "Software\A\B\C" HKEY_CURRENT_USER
T t2="C:\a\b.txt"
set t2 "t2" "Software\A\B\C" HKEY_CURRENT_USER
T t3="C:\c d\e\"
set t3 "t3" "Software\A\B\C" HKEY_CURRENT_USER
D d2=01
set d2 "d2" "Software\A\B\C" HKEY_CURRENT_USER
H h2
h2.str(1 "02 0c 00 00 00 00 00 00 00 00 00 00 00")
set h2 "h2" "Software\A\B\C" HKEY_CURRENT_USER
T t4=
a,,0x0
b,,0x2
c,,0x5
set t4 "t4" "Software\A\B\C" HKEY_CURRENT_USER
;[HKEY_LOCAL_MACHINE\Software\D\E\F]
D d1=064
set d1 "d1" "Software\D\E\F" HKEY_LOCAL_MACHINE
H h1
h1.str(1 "20 01 00")
set h1 "h1" "Software\D\E\F" HKEY_LOCAL_MACHINE
T t3="C:\c d\e\"
set t3 "t3" "Software\D\E\F" HKEY_LOCAL_MACHINE
T t4=
a,,0x0
b,,0x2
c,,0x5
set t4 "t4" "Software\D\E\F" HKEY_LOCAL_MACHINE |
|