powershell - 如何使用 PowerShell 删除 REG_DWORD 注册表值,其中注册表值如 '*String*'?
问题描述
PowerShell 将注册表值(及其注册表数据)作为数组显示$\_.Property
在其父注册表项中。如何仅选择和删除值所在的注册表值\*String\*
?
我尝试在 StackOverflow 和 Google 上搜索高低搜索,尝试了许多涉及Get-Item
、Get-ItemProperty
、Get-ChildItem
、Select-Object
(包括-ExpandProperty
参数)的组合,并Where-Object
选择了我想要的注册表值(在继续合并删除之前)。我现在完全无能为力,无法弄清楚如何简单地查找注册表值(例如\*Text\*
存在于特定注册表项中)并删除它们。如此简单的事情似乎如此困难!我不知道如何处理数组中的数据!
Get-Item -Path HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\SharedDLLs
$\_.Property
每个注册表值都作为注册表项下的数组的一部分列出HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\SharedDLLs
。我期待的结果是我可以做一些大致的事情,比如$\_.RegistryValue -Like '\*Text\*' | Remove-Item
删除匹配的注册表值\*Text\*
。
为了澄清以确保某些词汇的正确技术使用,“注册表项”显示为 regedit.exe 中的文件夹。
“注册表值”是任何类型的条目,例如REG\_SZ
、REG\_DWORD
、REG\_MZ
等。注册表值包含“注册表数据”,根据注册表类型,它可能是字符串、32 位值(有时表示为 1、0 或 0x000000、0x000001)。
我们经常将“注册表值”称为“注册表键”(这是不正确的技术用法),将“注册表数据”称为“注册表值”(也是不正确的技术用法),将“注册表键”称为文件夹/位置/“this放在注册表中”。
解决方案
注册表提供者太可怕了。我只希望 get-itemproperty 像这样工作:
# get-itemproperty2.ps1
# get-childitem skips top level key, use get-item
# can't remove default name
param([parameter(ValueFromPipeline)]$key)
process {
$valuenames = $key.getvaluenames()
if ($valuenames) {
$valuenames | foreach {
$value = $_
[pscustomobject] @{
Path = $key -replace 'HKEY_CURRENT_USER',
'HKCU:' -replace 'HKEY_LOCAL_MACHINE','HKLM:'
Name = $Value
Value = $Key.GetValue($Value)
Type = $Key.GetValueKind($Value)
}
}
} else {
[pscustomobject] @{
Path = $key -replace 'HKEY_CURRENT_USER',
'HKCU:' -replace 'HKEY_LOCAL_MACHINE','HKLM:'
Name = ''
Value = ''
Type = ''
}
}
}
然后你可以做这样的事情:
PS C:\users\me> get-item hkcu:\key1 | get-itemproperty2
Path Name Value Type
---- ---- ----- ----
HKCU:\key1 name1 value1 String
HKCU:\key1 name2 value2 String
PS C:\users\me> get-item hkcu:\key1 | get-itemproperty2 | where name -eq name1
Path Name Value Type
---- ---- ----- ----
HKCU:\key1 name1 value1 String
PS C:\users\me> get-item hkcu:\key1 | get-itemproperty2 | where name -eq name1 | Remove-ItemProperty -whatif
What if: Performing the operation "Remove Property" on target "Item: HKEY_CURRENT_USER\key1 Property: name1".
PS C:\users\me> get-childitem -recurse hkcu:\key1 | get-itemproperty2
Path Name Value Type
---- ---- ----- ----
HKCU:\key1\key2 name2 value2 String
HKCU:\key1\key2 default String
HKCU:\key1\key2\key3 name3 value3 String
HKCU:\key1\key2\key3\key4
推荐阅读
- azure-data-factory - 更改数据类型 - Azure 数据工厂的数据流
- c - 如何在 C 中实现 futimens 函数以更改文件上的时间戳
- spring - 使用 r2dbc 设置集成测试
- python - 基于字符串数据类型的预测
- javascript - 如何在这个(非常低效的)代码中修复穿墙故障
- sql-server - 使用 SSMS 时 SQL 还原失败并出现错误
- c - 如何使用指针算法指向链表结构的下一个元素?
- javascript - React-redux - 嵌套连接组件
- database - 在实现存储库模式时将自定义的 eloquent 方法放在哪里
- c - 具有停止条件但没有基本情况的递归函数仍然有效