Powershell可以使用文件操作API来操作注册表,注册表项就类似于Windows的文件夹。
如下是一个简单的示例:
上述例子就演示了利用cd指令(Set-Location)设置当前的注册表路径, 然后通过dir指令(Get-ChildItem)获取所有的子项。
注册表项API
在Powershell中,注册表项基本上和文件夹是对等的,可以使用文件夹操作相关API来操作注册表项。通常的操作有:
- 新建项: New-Item (mkdir、ni)
- 重命名项:Rename-Item (ren、rni)
- 删除项: Remove-Item (rm)
- 获取子项:Get-ChildItem (dir)
例如,我们可以用New-Item来创建一个注册表项。
New-Item Item3
由于注册表的Item只有一个类型,因此无需像用New-Item创建文件夹那样要指定Type参数。
另外,mkdir这种直接创建文件夹的api对于创建注册表项也是有效的,非常方便。
注册表值API
注册表值并不是对应的文件的,而是ItemProperty。我们可以用ItemPropertyAPI就行注册表的值操作:
- 获取所有值:Get-ItemProperty
- 写入值:Set-ItemProperty
简单的示例如下:
Set-ItemProperty -Path "." -Name "link" -Type "DWord" -Value 23
Get-ItemPropertyValue -Path "." -Name "link"
Rename-ItemProperty -Path "." -Name "link" -NewName "link2"
我这里用的还是相对比完整的命令行,实际应用中可以简化一下,例如
Set-ItemProperty "." "link" 23
Rename-ItemProperty "." "link" "link2"
默认值
对于Property的访问,需要传入Name作为参数的,但注册表项是有一个特殊的Name默认值的
对于这个值,我么可以用特殊的名称"(default)"来访问它。
Set-ItemProperty -Path "." -Name "(default)" -Type "DWord" -Value 23
对象访问
在程序中对于值的读写的时候,用Object访问更为方便些。
$a = Get-ItemProperty "."
echo $a.link
$a.link = 256
值类型
在注册表中,值有不同的类型,我们可以不指定类型,让它自动识别。
Set-ItemProperty "." "link" "hello"
Set-ItemProperty "." "link" 323
同时,也可以主动指定Type类型:
Set-ItemProperty -Path "." -Name "link" -Type "DWord" -Value 23
注册表支持如下几种Type类型:
- String: REG_SZ.
- ExpandString: REG_EXPAND_SZ.
- Binary: REG_BINARY.
- DWord: REG_DWORD.
- MultiString: REG_MULTI_SZ.
- Qword: REG_QWORD.
- Unknown: REG_RESOURCE_LIST.
参考文章: