使用PowerShell读、写、删除注册表键值

时间:2023-03-09 08:23:47
使用PowerShell读、写、删除注册表键值

访问注册表键值

在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 
}

-------------powershell注册表相关命令(可能不全)------------------
这些个命令的具体用法,请看手册
get-childitem 即dir
new-item              新建(注册表)目录项
remove-item           删除目录项
rename-item           改名目录项
copy-item                复制目录树
move-item             移动目录树

New-ItemProperty                        新建某键,并赋值。即新建键值对
remove-itemproperty                        删除注册表 某键值对
Copy-ItemProperty                        把键和值,从某注册表路径复制到另一个。
Move-ItemProperty                        移动键的位置,键值不变
Rename-ItemProperty                           更改键名,键值不变
Clear-ItemProperty                        清空某键的值,但键名不变

Get-ItemProperty                            注册表键值  -> powershell变量值 ,即读取
set-itemproperty                            powershell变量值 -> 注册表键值  ,即写入

值的类型:
String=字符串
MultiString=多字符串
ExpandString=可扩充字符串
Binary=二进制值 
DWord=32位值
QWord=64位值

get-acl 显示注册表某目录的安全描述符
set-acl 更改注册表项的安全描述符。
注意:此二条命令只对,注册表目录有效。无法在注册表的键和值上设置权限。

-------------------------例子-------------------------
目的:
列表HKEY_CURRENT_USER
cd    hkcu: 回车
dir    回车

目的:
建立一个键名为powershella,值为powershellb的键值对。类型为string
New-ItemProperty -path hkcu: -name powershella -value powershellb -PropertyType string

目的:
建立一个键名为powershellc,值为【空】的键。类型为string
New-ItemProperty -path hkcu: -name powershellc -value  "" -PropertyType string

目的:
读取powershella的值,进入变量$mmmm
$mmmm = (Get-ItemProperty -path hkcu: -name powershella).powershella

目的:
把注册表 hkcu:powershella 的值,设置成变量$nnnn的值
$nnnn = "chuanjiaoshi"
set-ItemProperty -path hkcu: -name powershella -value $nnnn

目的:
获取hkcu:\software目录的权限
get-acl hkcu:\software