如何使用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