Powershell可以使用文件操作API来操作注册表,注册表项就类似于Windows的文件夹。

Powershell注册表操作小结_命令行

如下是一个简单的示例:

Powershell注册表操作小结_重命名_02

上述例子就演示了利用cd指令(Set-Location)设置当前的注册表路径, 然后通过dir指令(Get-ChildItem)获取所有的子项。

注册表项API

在Powershell中,注册表项基本上和文件夹是对等的,可以使用文件夹操作相关API来操作注册表项。通常的操作有:

例如,我们可以用New-Item来创建一个注册表项。

New-Item Item3

Powershell注册表操作小结_创建文件夹_03

由于注册表的Item只有一个类型,因此无需像用New-Item创建文件夹那样要指定Type参数。

另外,mkdir这种直接创建文件夹的api对于创建注册表项也是有效的,非常方便。

注册表值API

注册表值并不是对应的文件的,而是ItemProperty。我们可以用ItemPropertyAPI就行注册表的值操作:

简单的示例如下:

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默认值的

Powershell注册表操作小结_创建文件夹_04

对于这个值,我么可以用特殊的名称"(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.

参考文章: