Utilizarea Powershell pentru a șterge ShellIconOverlayIdentifiers pe Windows

0

Problema

Eu sunt în prezent foarte deranjat de Dropbox și Nextcloud, care luptă ShellIconOverlayIdentifier lista. O problemă pe care mulți oameni par să aibă, atunci când căutați pe internet.

Acum vreau să-mi combina supărare cu intenția mea de a învăța powershell (7.2.0).

Am început cu următoarele script-ul, care va prelua toate cheile. Și mai târziu, vreau să folosesc regex prin -match pentru a găsi intrări vreau să-l ștergeți. Acum lucrez cu ambele Remove-Item -WhatIf și Get-ItemProperty pentru a o testa.

În prezent, problema mea este ca nu pot crea lista mea ca destinate. Dar când mă hrănesc lista în a elimina comanda am înțeles că drumul nu poate fi găsit. Ce fac gresit?

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

Eroarea este 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. Apparantly se adaugă la cale ca și cale relativă pentru locația curentă. De ce nu se interpreta ca o cale absolută? Când am ommit push-locație parte trys să adăugați calea de registry pentru a-mi director de lucru curent în care locuiește script-ul. Dar acest lucru este greșit la fel de bine.

Multumesc anticipat pentru ajutor.

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

Cel mai bun răspuns

1

Utilizați una dintre următoarele:

$filteredList | Remove-Item -WhatIf -Recurse

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

Comenzile de mai sus se asigura că elementele de registry (chei) sunt legate de lor completă, provider-a calificat căi de a Remove-Itemmodelului -LiteralPath parametru, prin intermediul lor .PSPath de proprietate; în caz de registry căi, calea furnizor prefix este Microsoft.PowerShell.Core\Registry:: (sau, dacă identificarea originare modulul nu este, de asemenea, necesar, Registry::, așa cum este folosit în Push-Location apel)

Ceea ce pare să se întâmple este că, atunci când elementele sunt stringified - care este ceea ce se întâmplă atunci când le treci ca un întreg, ca un argument (de exemplu, Remove-Item $filteredlist, care este la fel ca Remove-Item -Path $filteredlist), au lipsa furnizorul prefix și sunt reprezentate ca registry-nativ căi.

Și dat fiind faptul că un complet de registru-nativ calea, cum ar fi HKEY_LOCAL_MACHINE\... nici nu începe cu o unitate caietul de sarcini , nici cu \ sau /, este interpretat ca o rudă calea, care rezultă în simptom-ai văzut.

2021-11-16 21:21:42

Multumesc pentru elaborarea explicație. Ambele variante de lucru. De fapt, am venit cu o a treia soluție. Ai putea adauga la raspunsul tau, deci avem toate opțiunile de aici? foreach ($item in $filteredList) {Remove-Item -WhatIf -Recurse Registry::$item}. De fapt, am început să-mi placă Powershell. Dar având în vedere că versiunea mea nu au de lucru, dar prima soluție propusă nu, mă face să mă întreb.
Gunter

Multumesc pentru acceptarea, Gunter; mă bucur că explicația a fost de ajutor. Sincer, având în vedere că soluțiile în răspunsul sunt mai concis (nu buclă) și mai rapid decât un foreach-bucla soluție, nu cred că acesta din urmă este în valoare de adăugarea. Da, nu e evident de ce $filteredList | Remove-Item -WhatIf -Recurse lucrări (a se vedea acest răspuns), și quirks în jurul valorii de trecere căi poate fi frustrant. Dar, în ciuda tuturor sale negi, PowerShell are multe de oferit.
mklement0

Multumesc pentru link-ul suplimentar. Văd că trebuie să învețe destul de un pic pentru a înțelege cum Powershell cmdlet-uri sunt de fapt prelucrare a informațiilor. Și, de asemenea, vă mulțumim pentru subliniind că bucla soluție ar fi de fapt mai lent. Într-adevăr, Powershell are multe de oferit. În prezent îmi place foarte mult pentru automatizarea lucruri, care a avut câteva clicuri altfel (repornirea servicii, ștergeți intrările de registry, repornirea explorer.exe). Așa că mă aștept la o dragoste-ură-relația cu powershell pentru acum :-)
Gunter

În alte limbi

Această pagină este în alte limbi

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