Użyj Powershell, aby usunąć identyfikatorów Shelliconoverlay w systemie Windows

0

Pytanie

Obecnie bardzo mnie drażnią Dropbox i Nextcloud, które oboje zmagają się z listą identyfikatorów ShellIconOverlayIdentifier. Problem, z którym, jak się wydaje, w obliczu wielu ludzi, gdy szukasz w Internecie.

Teraz chcę połączyć swoją irytację z zamiarem zbadania powershell (7.2.0).

Zacząłem od następnego skryptu, który musi pobrać wszystkie klucze. I później chcę używać wyrażenie regularne przez -match aby znaleźć rekordy, które chcę usunąć. W tej chwili pracuję z obu Remove-Item -WhatIf i Get-ItemProperty aby to sprawdzić.

Obecnie mój problem polega na tym, że mogę stworzyć swoją listę z przeznaczeniem. Ale gdy wpisuję listę polecenie usuwania, dostaję, że ścieżka nie może być znaleziony. Co robię nie tak?

Push-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers

$list = Get-ChildItem -Path .

$filteredList = $list -match "DropboxExt10"

$filteredList

# Remove-Item -WhatIf -Recurse $filteredList
Get-ItemProperty $filteredList

Pop-Location

Błąd w tym, że Cannot find path 'Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\ DropboxExt10' because it does not exist. Zewnętrznie dodaje drogę jak względna ścieżka do bieżącej lokalizacji. Dlaczego to nie jest interpretowany jako ścieżka bezwzględna? Kiedy usuwam część push-lokalizacji, ona próbuje dodać ścieżkę do rejestru w mój bieżący katalog roboczy, w którym znajduje się skrypt. Ale i to też źle.

Z góry dziękuję za pomoc.

powershell registry windows
2021-11-16 19:48:52
1

Najlepsza odpowiedź

1

Użyj jeden z następujących:

$filteredList | Remove-Item -WhatIf -Recurse

# Alternatively:
Remove-Item -LiteralPath $filteredList.PSPath -WhatIf -Recurse

Powyższe polecenia gwarantują, że elementy rejestru (klucze) są ich pełne, określonymi przez dostawcę drogami doRemove-Item'z -LiteralPath parametr, przez ich .PSPath właściwość; w przypadku dróg rejestru prefiks dostawcy drodze równy Microsoft.PowerShell.Core\Registry:: (lub, jeśli identyfikacja oryginalnego modułu również nie jest wymagane, Registry::jak jest używany w pracy Push-Location zadzwoń)

To, że, podobno, się dzieje, polega na tym, że gdy elementy są zbudowane, co się dzieje, gdy mijamy ich w ogóle w jako argument (np. Remove-Item $filteredlist, że to samo, co Remove-Item -Path $filteredlist), u nich nie ma prefiks operatora i są one przedstawione w postaci własnych ścieżek rejestru.

I biorąc pod uwagę, że pełna własną drogę do rejestru, takiego jak HKEY_LOCAL_MACHINE\... ani rozpoczyna się od specyfikacji napędu, ani z \ lub /to jest interpretowany jako względne ścieżki prowadzące do objawu tak, który widzieliście.

2021-11-16 21:21:42

Dziękuję za szczegółowe wyjaśnienie. Obie opcje działają. Właściwie wymyśliłem trzecie rozwiązanie. Nie można dodać to w odpowiedzi na swoje pytanie, aby u nas były wszystkie opcje tutaj? foreach ($item in $filteredList) {Remove-Item -WhatIf -Recurse Registry::$item}. Na prawdę mi się zaczynał podobać Powershell. Ale, biorąc pod uwagę, że moja wersja nie działa, ale swoje pierwsze proponowane rozwiązanie działa, zmusza mnie do myślenia.
Gunter

Dziękuję, że zgodził się, Günther; cieszę się, że wyjaśnienie było przydatne. Szczerze mówiąc, biorąc pod uwagę, że decyzje w odpowiedzi bardziej zwięzły (bez pętli) i szybciej, niż foreach-cykliczne rozwiązanie, nie sądzę, że ostatnie warto dodać. Tak, nie jest do końca jasne, dlaczego $filteredList | Remove-Item -WhatIf -Recurse działa (patrz Tę odpowiedź), i dziwactwa związane z odbywającymi się drogami, mogą się rozczarować. Ale mimo wszystko swoje brodawki, PowerShell może wiele zaoferować.
mklement0

Dziękuję za dodatkową link. Widzę, że muszę się sporo nauczyć, aby zrozumieć, jak poleceń cmdlet środowiska Powershell faktycznie przetwarzają informacje. A także dziękuję, że podałeś, że rozwiązanie z cyklem faktycznie będzie wolniej. Naprawdę, Powershell może wiele zaoferować. Obecnie bardzo podoba mi się to do automatyzacji rzeczy, które w przeciwnym razie zajęli by się sporo kliknięć (ponowne uruchomienie usługi, usuwanie wpisów z rejestru, restart explorer.exe). Więc oczekuję relacji miłości i nienawiści z powershell w tej chwili :-)
Gunter

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................