Powershell: delete all the registry keys containing a string

可紊 提交于 2021-02-16 18:06:20

问题


I would like to delete all the keys (1000+) containing Python35 from :HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-2\Components

For instance I would like to delete all the keys similar to that one:

  • Keyname: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-2\Components\0027CAECCC428F356B8D845FF8331246

  • Name: 0F617A7B1C879BC47865E0155CDD6722

  • Data: C:\Users\Me\AppData\Local\Programs\Python\Python35\Lib\venv\__init__.py

I tried this.

Get-ChildItem -path HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-2\Components\ -Recurse | where { $_.Name -match 'Python35'} | Remove-Item -Force

Powershell runs without error,but when I check it in the registry, the keys are still there.

Powershell is run as admin and Admin has the ownership of the key HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-2\Components and also full control on that key and its subkeys.


回答1:


Try the following script:

$RE = 'Python35'
$Key = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-2\Components'
Get-ChildItem $Key -Rec -EA SilentlyContinue | ForEach-Object {
   $CurrentKey = (Get-ItemProperty -Path $_.PsPath)
   If ($CurrentKey -match $RE){
     $CurrentKey|Remove-Item -Force -Whatif
   }
}

If the output looks OK remove the -WhatIf paramter from Remove-Item



来源:https://stackoverflow.com/questions/44196938/powershell-delete-all-the-registry-keys-containing-a-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!