Použití prostředí Powershell odstranit ShellIconOverlayIdentifiers na Windows

0

Otázka

V současné době jsem velmi naštvaný Dropbox a Nextcloud, které obě bitvy ShellIconOverlayIdentifier seznamu. Problém, který mnoho lidí, zdá se, když jste hledat na internetu.

Nyní chci spojit svou nepříjemnost s mým záměrem naučit powershell (7.2.0).

Začal jsem s následující skript, který musí načíst všechny klíče. A později jsem chtěl použít přes regex -match najít položky, chci smazat. Teď jsem pracovat s oběma Remove-Item -WhatIf a Get-ItemProperty vyzkoušet si to.

V současné době můj problém je, že jsem si vytvořit svůj seznam, jak bylo zamýšleno. Ale když jsem krmit do seznamu odebrat příkaz jsem si, že cestu nelze nalézt. Co dělám špatně?

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

Chyba je 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. Zřejmě přidá cestu jako relativní cestu k aktuálnímu umístění. Proč ne interpretovat jako absolutní cestu? Když jsem ommit push-umístění součástí je trys přidat cestu registru k mé aktuální pracovní adresář, ve kterém je skript životy. Ale to je špatně, stejně.

Díky za vaši pomoc předem.

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

Nejlepší odpověď

1

Použijte jednu z následujících:

$filteredList | Remove-Item -WhatIf -Recurse

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

Výše uvedené příkazy zajistí, že položky registru (klíče) jsou vázáni jejich plnou, poskytovatele kvalifikované cesty k Remove-Item's -LiteralPath parametr, prostřednictvím jejich .PSPath majetku; v případě cest registru, cesta je poskytovatel prefix je Microsoft.PowerShell.Core\Registry:: (nebo, pokud identifikace původní modul není také nutné, Registry::, jak je používán ve vaší Push-Location volání)

To, co se zdá být děje, je, že pokud položky jsou stringified - což je to, co se stane, když se jim projít jako celek, jako argument (např. Remove-Item $filteredlist, což je stejné jako Remove-Item -Path $filteredlist), že nedostatek poskytovatele prefix a jsou reprezentovány jako registry-nativní cesty.

A vzhledem k tomu, že plnou registru-nativní cestou, jako jsou HKEY_LOCAL_MACHINE\... ani začíná řídit specifikací , ani s \ nebo /to je interpretován jako relativní cesta, což má za následek příznakem jsi viděl.

2021-11-16 21:21:42

Díky za komplikované vysvětlení. Obě varianty práce. Vlastně jsem přišel s třetí řešení. Můžete ji přidat na vaši odpověď, takže máme všechny možnosti? foreach ($item in $filteredList) {Remove-Item -WhatIf -Recurse Registry::$item}. Vlastně jsem začínal jako Powershell. Ale vzhledem k tomu, že moje verze nefunguje, ale vaše první navrhované řešení nemá, zajímalo by mě.
Gunter

Díky za přijetí, Gunter; jsem rád, že vysvětlení bylo užitečné. Upřímně, vzhledem k tomu, že řešení v odpovědi jsou více stručné (ne smyčky) a rychlejší než foreach-loop řešení, nemyslím si, že ta stojí za přidání. Ano, to není jasné, proč $filteredList | Remove-Item -WhatIf -Recurse funguje (viz. tato odpověď), a vtípky kolem cesty, může být frustrující. Ale, i přes všechny jeho bradavice, PowerShell má hodně co nabídnout.
mklement0

Díky za další odkaz. Vidím, že se musím naučit dost, aby pochopili, jak Powershell cmdlets jsou vlastně zpracování informací. A také díky za to, že ukázal, že smyčka řešením by vlastně být pomalejší. Opravdu, Powershell má hodně co nabídnout. Já v současné době opravdu rád pro automatizaci věci, které trvalo pěkných pár kliknutí jinak (restartování služby, odstranění položky registru, restartování explorer.exe). Takže očekávám, že láska-nenávist vztah s powershell pro teď :-)
Gunter

V jiných jazycích

Tato stránka je v jiných jazycích

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