我正在尝试删除包含值“ Palo Alto Networks”的注册表字符串。
Path: HKEY_USERS\S-1-5-21-484763869-1659004503-1644491937-15773\Software\Microsoft\Windows\CurrentVersion\UFH\SHC
String: 61
Value: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Palo Alto Networks\GlobalProtect\GlobalProtect.lnk
C:\Program Files\Palo Alto Networks\GlobalProtect\PanGPA.exe
/noshrink
如果脚本中检测到值“ Palo Alto Networks”,我希望脚本删除字符串“ 61”。
这是我认为与我的目标接近的代码。
Get-ItemProperty -Path $SearchBase |
Where-Object {
$_.$RegKeyValueName -match $RegKeyValueDataPattern
} |
Remove-ItemProperty -Name $RegKeyValueName
但是,$ RegKeyValueName是随机的。可能不是61。 我的目标是如果$ RegKeyValueDataPattern匹配,它将删除$ RegKeyValueName
答案 0 :(得分:0)
好的,我不确定您到底要删除什么。当您查看以下信息时,它可能对下次有所帮助:Structure of the Registry。
如果您想获取注册表项值并且知道名称,则可以使用以下语法:
$SearchBase = 'REGISTRY::HKEY_USERS\S-1-5-21-484763869-1659004503-1644491937-15773\Software\Microsoft\Windows\CurrentVersion\UFH\SHC'
$RegKeyValueName = '61'
$RegKeyValueDataPattern = 'Palo Alto Networks'
Get-ItemProperty -Path $SearchBase
如果您要查找特定值,则可以指定名称...
Get-ItemProperty -Path $SearchBase -Name $RegKeyValueName
...或使用Where-Object过滤输出...
Get-ItemProperty -Path $SearchBase |
Where-Object {
$_.$RegKeyValueName -match $RegKeyValueDataPattern
}
如果您只想删除该值的数据,则可以使用Set-ItemProperty并提供一个空字符串...
Get-ItemProperty -Path $SearchBase |
Where-Object {
$_.$RegKeyValueName -match $RegKeyValueDataPattern
} |
Set-ItemProperty -Name $RegKeyValueName -Value ''
...。或者,如果您想删除完整的值,则可以使用Remove-ItemProperty ...
Get-ItemProperty -Path $SearchBase |
Where-Object {
$_.$RegKeyValueName -match $RegKeyValueDataPattern
} |
Remove-ItemProperty -Name $RegKeyValueName
...。如果您不知道要删除的值的名称,则可以使用以下代码片段:
Get-Item -Path $SearchBase |
Select-Object -ExpandProperty Property |
Where-Object {
(Get-ItemProperty -Path $SearchBase -Name $_ ) -match $RegKeyValueDataPattern
} |
ForEach-Object {
Remove-ItemProperty -Path $SearchBase -Name $_
}