2017-05-26 63 views
0

我想從HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UserData \ S-1-5-2 \中刪除包含Python35的所有密鑰(1000+)組件Powershell:刪除包含字符串的所有註冊表項

比如我想刪除所有類似於一個鍵:

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

  • 名稱:0F617A7B1C879BC47865E0155CDD6722

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

我試過了。

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

Powershell運行時沒有錯誤,但當我在註冊表中檢查時,鍵仍然存在。

PowerShell是運行作爲管理員和管理員具有對密鑰的密鑰HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-2\Components,也完全控制的所有權以及其子項

+0

如果您省略Remove-Item,您會得到什麼輸出?檢查Get-ChildItem HKLM的屬性:key | Get-Member' – LotPings

+0

如果省略'|刪除項目強制部分。我沒有在列表中找到一個'Get-ChildItem' cf https://paste.ubuntu.com/24664764/ – Enora

+0

你的示例鍵沒有說'Python36'而不是'Python35'。這不匹配。 – restless1987

回答

1

嘗試下面的腳本:

$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 
    } 
} 

如果輸出看起來OK刪除-WhatIf來自Remove-Item的參數

+0

它的工作,但我想知道爲什麼代碼我的問題不起作用。 – Enora

+0

我認爲註冊表提供程序的Get-ChildItem輸出不能直接解析 – LotPings