如何使用PowerShell访问和管理Windows注册表

时间:2020-01-09 10:46:34  来源:igfitidea点击:

从第一个版本开始,PowerShell为管理员提供了一套广泛的工具来与Windows系统注册表交互。如有必要,所有与注册表有关的典型操作都可以在不使用良好的旧Regedit接口的情况下执行,或者注册.exe,但在PowerShell命令提示符中。在不同的脚本和场景中,它是不可或者缺的。在本文中,我们将考虑如何创建、编辑或者删除Windows注册表的键和参数、搜索某些内容或者使用PowerShell连接到远程计算机上的注册表。

使用PowerShell进行注册表导航

在PowerShell中使用注册表类似于在本地磁盘上处理公共文件。

显示可用驱动器的列表:

get-psdrive

删除注册表项或者参数

删除先前创建的参数SuperParamString:

$HKCU_Desktop= "HKCU:\Control Panel\Desktop"
Remove-ItemProperty –Path $HKCU_Desktop\NewKey –Name "SuperParamString"

然后删除整个分支:

Remove-Item –Path $HKCU_Desktop\NewKey –Recurse

说明–Recurse key表示所有子键必须递归删除,无需确认。

要删除分支中的所有项,但不删除分支本身,命令如下所示:

Remove-Item –Path $HKCU_Desktop\NewKey\* –Recurse

如何重命名键或者参数

要重命名参数,请使用以下命令:

Rename-ItemProperty –path ‘HKCU:\Control Panel\Desktop\NewKey’ –name "SuperParamString" –newname "OldParamString"

同样,可以重命名注册表项:

Rename-Item -path 'HKCU:\Control Panel\Desktop\NewKey' OldKey

使用PowerShell搜索注册表

PowerShell允许我们搜索注册表。下一个脚本在HKCU:\Control Panel\Desktop中搜索参数,这些参数的名称包含dpi键。

$Path = (Get-ItemProperty ‘HKCU:\Control Panel\Desktop’)
$Path.PSObject.Properties | ForEach-Object {
If($_.Name -like '*dpi*'){
Write-Host $_.Name ' = ' $_.Value
}
}

使用PowerShell远程访问注册表

PowerShell允许我们从远程计算机访问注册表。我们可以使用WinRM(调用命令或者输入PSSession)连接到远程计算机:

Invoke-Command –ComputerName srv-fs1 –ScriptBlock { Get-ItemProperty -Path 'HKLM:\System\Setup' -Name WorkingDirectory}

或者使用远程注册表连接(必须启用RemoteRegistry)

$Server = "lon-fs1"
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)
$RegKey= $Reg.OpenSubKey("System\Setup")
$RegValue = $RegKey.GetValue("WorkingDirectory")

提示。如果必须在多台域计算机上创建/修改某个注册表参数,则更容易使用GPO功能。

所以,我们看了使用PowerShell与Windows注册表交互的典型例子。