Utilizzare Powershell per eliminare ShellIconOverlayIdentifiers su Windows

0

Domanda

Attualmente sono molto infastidito da Dropbox e Nextcloud, che sia battaglia il ShellIconOverlayIdentifier elenco. Un problema che molte persone sembrano avere, quando si ricerca su internet.

Ora voglio unire il mio fastidio con il mio intento di imparare powershell (7.2.0).

Ho iniziato con il seguente script, che deve recuperare tutte le chiavi. E poi voglio usare regex via -match per trovare le voci che si desidera eliminare. Per ora io lavoro con entrambi Remove-Item -WhatIf e Get-ItemProperty per eseguire il test.

Attualmente il mio problema è che posso creare la mia lista come previsto. Ma quando ho feed elenco in rimuovere comando ottengo che il percorso non può essere trovato. Che cosa sto facendo di sbagliato?

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

L'errore è 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. A quanto pare si aggiunge il percorso come percorso relativo alla posizione corrente. Perché non interpretare come un percorso assoluto? Quando ho ommit il push-posizione parte trys per aggiungere il percorso del registro di sistema per il mio attuale directory di lavoro in cui lo script vita. Ma questo è sbagliato, come pure.

Grazie per il vostro aiuto in anticipo.

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

Migliore risposta

1

Utilizzare uno dei seguenti:

$filteredList | Remove-Item -WhatIf -Recurse

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

I comandi di cui sopra garantire che le voci del registro di sistema (chiavi) sono vincolati alla loro completa provider qualificati percorsi di Remove-Item's -LiteralPath parametro, tramite il loro .PSPath proprietà; nel caso di percorsi del registro di sistema, il percorso del fornitore prefisso è Microsoft.PowerShell.Core\Registry:: (o, se l'identificazione di origine modulo non è richiesto, inoltre, Registry::utilizzato nel vostro Push-Location chiamata)

Ciò che sembra accadere è che, quando le voci sono stringified - che è ciò che accade quando si passa di loro come un tutto, come un argomento (ad es. Remove-Item $filteredlistche è la stessa Remove-Item -Path $filteredlist), che alla mancanza di provider prefisso e sono rappresentati registro di sistema nativo percorsi.

E dato che un registro-percorso nativo come HKEY_LOCAL_MACHINE\... né inizia con una specifica unità , né con \ o /viene interpretato come relativo percorso, con conseguente sintomo che hai visto.

2021-11-16 21:21:42

Grazie per l'elaborata spiegazione. Entrambe le varianti lavoro. In realtà mi è venuta una terza soluzione. Si potrebbe aggiungere la tua risposta, così abbiamo tutte le opzioni qui? foreach ($item in $filteredList) {Remove-Item -WhatIf -Recurse Registry::$item}. In realtà stavo iniziando a come Powershell. Ma dato che la mia versione non ha funzionato, ma la tua prima soluzione proposta fa, mi fa pensare.
Gunter

Grazie per aver accettato, Gunter; sono contento che la spiegazione sia stata utile. Onestamente, dato che le soluzioni in risposta più concisa (senza loop) e più veloce di un foreach-ciclo di soluzione, non credo che quest'ultima è la pena di aggiungere. Sì, non è chiaro il motivo $filteredList | Remove-Item -WhatIf -Recurse (vedi questa risposta), e i capricci per il passaggio di percorsi può essere frustrante. Ma, nonostante tutte le sue verruche, PowerShell ha molto da offrire.
mklement0

Grazie per il link. Vedo che devo imparare un bel po ' per capire come i cmdlet di Powershell sono in realtà l'elaborazione delle informazioni. E grazie anche per aver sottolineato che il loop soluzione sarebbe in realtà essere più lento. Infatti, Powershell ha molto da offrire. Io attualmente mi piace per l'automazione di roba, che ci sono voluti un paio di click in caso contrario (riavvio dei servizi, l'eliminazione di voci del registro di sistema, riavviare explorer.exe). Quindi mi aspetto un amore-odio-rapporto con powershell per ora :-)
Gunter

In altre lingue

Questa pagina è in altre lingue

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