Pomocou prostredia Powershell môžete vymazať ShellIconOverlayIdentifiers na Windows

0

Otázka

Ja som v súčasnej dobe veľmi vadí Dropbox a Nextcloud, ktoré aj bitky ShellIconOverlayIdentifier zoznamu. Problém, ktorý mnohí ľudia sa zdajú mať, keď budete hľadať na internete.

Teraz som sa chcete spojiť zlosť s mojím úmyslom učiť sa powershell (7.2.0).

Začal som s nasledujúci skript, ktorý sa získať všetky kľúče. A neskôr som chcete použiť regulárny výraz cez -match nájsť položky, ktoré som chcete odstrániť. Teraz pracujem s oboma Remove-Item -WhatIf a Get-ItemProperty to vyskúšať.

V súčasnosti môj problém je, že som si vytvoriť svoj zoznam, ako je určené. Ale keď som sa nasýtil do zoznamu odstrániť príkaz som si, že cesta sa nedá nájsť. Čo robím zle?

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. Apparantly pridáva cestu, ako relatívnu cestu do aktuálnej polohy. Prečo nemá interpretovať ako absolútna cesta? Keď som ommit push-umiestnenie časť trys pridať cesta databázy registry na môj aktuálny pracovný adresár, v ktorom skript život. Ale to je zle ako dobre.

Vďaka za vašu pomoc vopred.

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

Najlepšiu odpoveď

1

Použite jeden z nasledujúcich postupov:

$filteredList | Remove-Item -WhatIf -Recurse

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

Vyššie uvedené príkazy zabezpečiť, aby položky databázy registry (klávesy) sú viazaní svojimi plná, služieb kvalifikovaných cesty , aby Remove-Item"s -LiteralPath parameter, cez ich .PSPath majetku; v prípade databázy registry, cesty, cesta, je poskytovateľ predpona je Microsoft.PowerShell.Core\Registry:: (alebo, ak identifikácia s pôvodom modul nie je tiež potrebné, Registry::ako sa používa vo vašej Push-Location hovor)

To, čo sa zdá byť deje je, že keď sú položky stringified - čo je, čo sa stane, keď si odovzdať ich ako celok, ako argument (napr. Remove-Item $filteredlist, ktorý je rovnaký ako Remove-Item -Path $filteredlist), ich nedostatok služieb predpony a sú reprezentované ako register-natívne cesty.

A vzhľadom na to, že celý register-natívne cestu ako HKEY_LOCAL_MACHINE\... ani začína jednotka špecifikácia , ani s \ alebo /je interpretovaný ako relatívna cesta, čo vedie k príznakom, ktoré ste videli.

2021-11-16 21:21:42

Vďaka za komplikované vysvetlenie. Oba varianty práce. Vlastne som prišiel s tretími riešenie. Mohli by ste pridať na vašu odpoveď, a tak sme sa všetky možnosti tu? foreach ($item in $filteredList) {Remove-Item -WhatIf -Recurse Registry::$item}. Vlastne som sa začína ako Powershell. Ale vzhľadom na to, že moja verzia nefunguje, ale váš prvý navrhované riešenie nemá, je pre mňa zázrak.
Gunter

Vďaka za prijatie, Gunter; som rád, že vysvetlenie bolo užitočné. Úprimne, vzhľadom na to, že riešenia v odpovedi sú stručnejšie (č slučky) a rýchlejšie ako foreach-slučky riešenie, nemyslím si, že tá je vhodné pridať. Áno, to nie je zrejmé, prečo $filteredList | Remove-Item -WhatIf -Recurse pracuje (pozri táto odpoveď), a vtipy okolo prechádzajúcej cesty môže byť frustrujúce. Ale, aj napriek všetkým jeho bradavice, PowerShell má veľa čo ponúknuť.
mklement0

Vďaka za ďalšie prepojenie. Vidím, som učiť sa trochu pochopiť, ako Powershell cmdlet sú vlastne spracovanie informácií. A tiež vďaka za poukazuje na to, že slučka riešenie by vlastne byť pomalší. Skutočne, Powershell má veľa čo ponúknuť. Som v súčasnej dobe veľmi sa mi páči pre automatizáciu veci, ktoré trvalo pomerne málo kliknutí inak (reštart služby, odstránenie položky databázy registry, reštartovať explorer.exe). Takže očakávam, že láska-nenávisť-vzťah s powershell teraz :-)
Gunter

V iných jazykoch

Táto stránka je v iných jazykoch

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