Utilizar o Powershell para eliminar ShellIconOverlayIdentifiers no Windows

0

Pergunta

Atualmente, estou muito irritado com o Dropbox e o Nextcloud, que tanto batalha a ShellIconOverlayIdentifier lista. Um problema que muitas pessoas parecem ter, quando você pesquisa na internet.

Agora eu quero combinar a minha irritação com a minha intenção de aprender powershell (7.2.0).

Eu comecei com o seguinte script, que deve recuperar todas as chaves. E, mais tarde, eu quero usar regex via -match para encontrar as entradas que deseja excluir. Agora eu trabalho com ambos Remove-Item -WhatIf e Get-ItemProperty para testá-lo.

Atualmente o meu problema é que eu posso criar minha lista de como se pretende. Mas quando eu alimento a lista para o comando remove eu conseguir que o caminho não pode ser encontrado. O que estou fazendo de errado?

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

O erro é 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. Aparentemente ele adiciona o caminho como caminho relativo para o local atual. Por que não interpretar como um caminho absoluto? Quando eu ommit o push-location parte trys para adicionar o caminho do registro para o meu diretório de trabalho atual, na qual o script de vida. Mas isso é bem errado.

Obrigado por sua ajuda antecipadamente.

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

Melhor resposta

1

Use um dos seguintes procedimentos:

$filteredList | Remove-Item -WhatIf -Recurse

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

Os comandos acima garantir que os itens de registo (teclas) são ligados por suas completo do fornecedor qualificado caminhos para Remove-Item's -LiteralPath parâmetro, através de seus .PSPath de propriedade; no caso de registro caminhos, o caminho do provedor do prefixo é Microsoft.PowerShell.Core\Registry:: (ou, se identificar a origem do módulo não é também necessário, Registry::é utilizada em seu Push-Location chamada)

O que parece estar acontecendo é que quando os itens são stringified - que é o que acontece quando você passa por elas como um todo, como um argumento (e.g. Remove-Item $filteredlist, que é o mesmo que Remove-Item -Path $filteredlist), eles falta o provedor de prefixo e são representados como registro nativo caminhos.

E dado que um registro completo nativo do caminho, como HKEY_LOCAL_MACHINE\... nem começa com uma especificação de unidade , nem com \ ou /, ele é interpretado como um parente caminho, resultando no sintoma que você viu.

2021-11-16 21:21:42

Obrigado pela elaborar explicação. Ambas as variantes do trabalho. Na verdade, eu vim com uma terceira solução. Pode adicionar a sua resposta, por isso temos todas as opções aqui? foreach ($item in $filteredList) {Remove-Item -WhatIf -Recurse Registry::$item}. Na verdade, eu estava começando a gostar do Powershell. Mas, dado que a minha versão não funcionou, mas a sua primeira solução proposta faz, me faz pensar.
Gunter

Obrigado por aceitar, Gunter, fico feliz que a explicação foi muito útil. Honestamente, dado que as soluções a resposta mais concisa (nenhum loop) e mais rápido do que um foreach-loop de solução, eu não acho que o último é a pena acrescentar. Sim, não é óbvio o porquê $filteredList | Remove-Item -WhatIf -Recurse obras (veja a resposta), e as peculiaridades em torno de passagem de caminhos pode ser frustrante. Mas, apesar de todas as suas verrugas, PowerShell tem muito a oferecer.
mklement0

Obrigado pelo link adicional. Eu vejo que eu tenho para aprender um pouco para entender como os cmdlets do Powershell são, na verdade, de processamento de informações. E também agradecemos a indicação de que o ciclo solução seria, na verdade, ser mais lento. De fato, o Powershell tem muito a oferecer. Atualmente eu realmente gosto dele para automatizar as coisas, o que levou alguns cliques caso contrário (reinicialização de serviços, excluindo entradas do registro, reiniciar explorer.exe). Então eu espero que um amor-ódio-relação com o powershell para agora :-)
Gunter

Em outros idiomas

Esta página está em outros idiomas

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