El uso de Powershell para eliminar ShellIconOverlayIdentifiers en Windows

0

Pregunta

Actualmente estoy muy molesto por Dropbox y Nextcloud, que tanto la batalla de las ShellIconOverlayIdentifier lista. Un problema que muchas personas parecen tener, cuando usted busca el internet.

Ahora quiero combinar mi molestia con mi intención de aprender powershell (7.2.0).

Empecé con la siguiente secuencia de comandos, el cual deberá recuperar todas las claves. Y luego quiero usar regex a través de -match para encontrar las entradas que desea eliminar. Por ahora yo trabajo con el Remove-Item -WhatIf y Get-ItemProperty para la prueba.

Actualmente mi problema es que puedo crear mi lista como la intención. Pero cuando yo me alimento de la lista en el comando remove me sale que la ruta de acceso no se puede encontrar. ¿Qué estoy haciendo mal?

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

El error es 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 agrega la ruta como ruta de acceso relativa a la ubicación actual. ¿Por qué no interpretar como una ruta de acceso absoluta? Cuando me ommit el empuje-ubicación de la parte trata de agregar la ruta de acceso del registro a mi directorio de trabajo actual en el que la secuencia de comandos de vida. Pero esto está mal así.

Gracias por su ayuda de antemano.

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

Mejor respuesta

1

Utilice uno de los siguientes:

$filteredList | Remove-Item -WhatIf -Recurse

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

Los comandos anteriores asegurarse de que los elementos de registro (claves) son obligados por sus completas, proveedor calificado rutas de acceso a Remove-Item's -LiteralPath parámetro, a través de su .PSPath de la propiedad; en el caso de registro de rutas, la ruta de acceso del proveedor de prefijo es Microsoft.PowerShell.Core\Registry:: (o, si la identificación de los originarios módulo no es también necesario, Registry::como el utilizado en su Push-Location la llamada)

Lo que parece estar sucediendo es que cuando los elementos están string - que es lo que ocurre cuando se pasa de ellos como un todo, como un argumento (por ejemplo, Remove-Item $filteredlist, que es el mismo que Remove-Item -Path $filteredlist), que falta el proveedor de prefijo , y se representan como registro nativos de caminos.

Y dado que un registro completo nativos ruta de acceso como HKEY_LOCAL_MACHINE\... ni comienza con una especificación de unidad ni con \ o /, es interpretado como una relación de ruta, lo que resulta en el síntoma que vio.

2021-11-16 21:21:42

Gracias por la elaborada explicación. Ambas variantes de trabajo. En realidad se me ocurrió una tercera solución. Puede agregar a su respuesta, así que tenemos todas las opciones aquí? foreach ($item in $filteredList) {Remove-Item -WhatIf -Recurse Registry::$item}. En realidad, yo estaba empezando a gustar Powershell. Pero dado que mi versión no trabajo, pero su primera propuesta de solución, hace que me pregunte.
Gunter

Gracias por aceptar, Gunter; me alegro de que la explicación fue muy útil. Honestamente, dado que las soluciones en la respuesta más concisa (no circular) y más rápido que un foreach-solución de circuito, no creo que la última es la pena añadir. Sí, no es obvio por qué $filteredList | Remove-Item -WhatIf -Recurse obras (ver esta respuesta), y las peculiaridades alrededor de pasar las rutas puede ser frustrante. Pero, a pesar de todas sus verrugas, PowerShell tiene mucho que ofrecer.
mklement0

Gracias por el enlace adicional. Veo que tengo que aprender un poco a entender cómo los cmdlets de Powershell son en realidad el procesamiento de la información. Y también gracias por señalar que la solución de circuito en realidad sería más lento. De hecho, Powershell tiene mucho que ofrecer. Actualmente realmente como para la automatización de cosas, que tomó un par de clics de otra manera (reiniciar los servicios, eliminar entradas del registro, reiniciar explorer.exe). Espero un amor-odio-relación con powershell por ahora :-)
Gunter

En otros idiomas

Esta página está en otros idiomas

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