1. 程式人生 > 其它 >如何使用PowerShell批量刪除登錄檔項

如何使用PowerShell批量刪除登錄檔項

問題描述

解除安裝了可牛壓縮軟體以後,發現右鍵選單中仍然有可牛壓縮的選項。不用想就知道是登錄檔中有該軟體的殘留。

開啟登錄檔,進行搜尋發現在計算機\HKEY_USERS\S-1-5-21-3610452307-4043425157-186669480-1001\Software\Classes的子目錄下有超過100+的關於可牛壓縮的子項。

登錄檔編輯器還不支援按住Shift進行多選,所以只能使用指令碼進行批量刪除。

!!!友情提示,刪除之前請進行登錄檔備份,或者你百分比確定你的程式碼沒有問題,再執行,否則發生的任何損失,本文概不負責!!!

觀察和該軟體相關的專案名稱,發現名稱中均有計算機\HKEY_USERS\S-1-5-21-3610452307-4043425157-186669480-1001\Software\Classes\kzip_main.exe.*

這樣的形式。有規律就好辦了,下面我們開始介紹相關知識,並進行程式碼批量刪除。

登錄檔路徑以及如何獲得登錄檔子項

在PowerShell中登錄檔也有路徑,跟我們檔案和資料夾路徑類似,上面的登錄檔項的路徑可以表示為:
`REGISTRY::\HKEY_USERS\S-1-5-21-3610452307-4043425157-186669480-1001\Software\Classes``。
那我們如何獲得該登錄檔路徑下面的所有子項呢?使用Get-ChildItem命令(別名dir或者ls),程式碼如下:

$root = "REGISTRY::\HKEY_USERS\S-1-5-21-3610452307-4043425157-186669480-1001\Software\Classes\"
$items = (ls -Path $root)

第一行定義登錄檔路徑,第二行得到該路徑下的所有子項,結果為Array陣列型別。

基於條件過濾刪除項

因為我們要刪除的子項名稱中都包含“kzip_main.exe”這樣的字元,所以我們使用Where-Object命令(別名where或者?)進行條件過濾,程式碼如下:

$items = $items | ? {$_.PSPath -like "*kzip_main.exe*"}

其中,|為管道運算子,將操作符前面的結果傳遞到操作符後面的處理中。$_符號代表迭代過程中的每個變數,是$PSItem系統內建變數的別名。在這裡即代表的是$items陣列中的每個元素。

For迴圈刪除子項

通過?命令選擇出來要刪除的元素以後,我們可以使用ForEach_Object命令(別名foreach或者%)遍歷該陣列刪除所有元素,程式碼如下:

$items | % {rm -Force -Recurse $_.PSPath}

其中,-Force和-Recurse引數代表強制刪除和迭代刪除子項。

最終程式碼

總結起來,上面的程式碼可以寫成如下一行:

(ls -Path "REGISTRY::\HKEY_USERS\S-1-5-21-3610452307-4043425157-186669480-1001\Software\Classes\") | ? {$_.PSPath -like "*kzip_main.exe*"} | % {rm -Force -Recurse $_.PSPath}

再強調一遍,登錄檔刪除有風險,最好進行備份再進行操作!!!

————————————————
版權宣告:本文為CSDN博主「卡爾曼和玻爾茲曼誰曼」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/theonegis/article/details/126526129