Powershell小技巧之获取注册表值的类型
当你不需要获取注册表数据类型而只要其值是非常简单的:你可以使用get-itemproperty:
get-itemproperty -path hklm:\software\microsoft\windows\currentversion\run
如果你需要获取数据类型,只需要多几个步骤:
$key = get-item -path hklm:\software\microsoft\windows\currentversion\run
$key.getvaluenames() |
foreach-object {
$valuename = $_
$rv = 1 | select-object -property name, type, value
$rv.name = $valuename
$rv.type = $key.getvaluekind($valuename)
$rv.value = $key.getvalue($valuename)
$rv
}
访问注册表键值
在powershell中,用户可以通过类似于hkcu:(作为hkey_current_user)和hklm:(代表hkey_local_matchine)的虚拟驱动器访问注册表键值。
如:dir registry::hkey_local_machine\software
通过这种方式用户可以很容易的复制、粘贴注册表内的键值,用户可以通过下面的命令获取已经注册的文件后缀:
dir registry::hkey_classes_root\.* -name | sort-object
读取注册表键值
在powershell中,用户能够以虚拟驱动器的形式来处理注册表的内容
下面的get-regidtryvalues函数列举存储在一个注册表键值下的所有键值,完整代码如下所示:
function get-registryvalues($key) {
(get-item $key).getvaluenames()
}
get-registryvalues hklm:\software\microsoft\windows\currentversion
get-registryvalue读取任意注册表键值并返回其内容,完整代码如下所示:
function get-registryvalue($key, $value) {
(get-itemproperty $key $value).$value
}
get-registryvalue ' hklm:\software\microsoft\windows\currentversion' `
sm_gamesname
写入注册表键值
添加或修改注册表键值在powershell中也是很方便的就可以完成的,下面创建名为set-registryvalue函数用来操作注册表键值,以下是完整的代码:
function set-registryvalue($key, $name, $value, $type="string") {
if ((test-path $key) -eq $false) { md $key | out-null }
set-itemproperty $key $name $value -type $type
}
set-registryvalue hkcu:\software\testabc myvalue hello
set-registryvalue hkcu:\software\testabc myvalue 12 dword
set-registryvalue hkcu:\software\testabc myvalue `
([byte[]][char[]]"hello") binary
移除注册表键值
通过remove-item删除目标注册表键,函数remove-registrykey的完整代码如下所示:
function remove-registrykey($key) {
remove-item $key -force
}
通过remove-itemproperty函数删除注册表值,完整的代码如下所示:
function remove-registryvalue($key, $value) {
remove-itemproperty $key $value
}
支持所有ps版本