删除包含特定值的注册表字符串

时间:2019-02-18 14:32:30

标签: powershell

我正在尝试删除包含值“ 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

1 个答案:

答案 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 $_
            }