Windows'ta shelliconoverlayıdentifiers'ı silmek için Powershell'i kullanın

0

Soru

Şu anda her ikisi de ShellİconOverlayIdentifier listesiyle savaşan Dropbox ve Nextcloud'dan çok rahatsızım. İnternette arama yaptığınızda birçok insanın sahip olduğu bir sorun.

Şimdi rahatsızlığımı powershell'i (7.2.0) öğrenme niyetimle birleştirmek istiyorum.

Tüm anahtarları alacak olan aşağıdaki komut dosyasıyla başladım. Ve daha sonra regex'i kullanmak istiyorum -match silmek istediğim girdileri bulmak için. Şimdi hem çalışıyorum Remove-Item -WhatIf ve Get-ItemProperty bunu test etmek için.

Şu anda benim sorunum listemi amaçlandığı gibi oluşturabilmem. Ancak listeyi remove komutuna beslediğimde yolun bulunamadığını görüyorum. Neyi yanlış yapıyorum?

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

Hata şu şekildedir 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. Görünen o ki, yolu geçerli konuma göreli yol olarak ekler. Neden mutlak bir yol olarak yorumlamıyor? Push-location bölümünü atladığımda, komut dosyasının yaşadığı geçerli çalışma dizinime kayıt defteri yolunu eklemeye çalışır. Ama bu da yanlış gibi.

Yardımlarınız için şimdiden teşekkürler.

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

En iyi cevabı

1

Aşağıdakilerden birini kullanın:

$filteredList | Remove-Item -WhatIf -Recurse

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

Yukarıdaki komutlar, kayıt defteri öğelerinin (anahtarlarının) tam, sağlayıcı tarafından nitelenmiş yollarına bağlı olmasını sağlar.Remove-Item's -LiteralPath parametre, onların aracılığıyla .PSPath özellik; kayıt defteri yolları söz konusu olduğunda, yolun sağlayıcı öneki Microsoft.PowerShell.Core\Registry:: (veya kaynak modülün tanımlanması da gerekli değilse, Registry:: olarak kullanılan sizin Push-Location aramak)

Ne görünür olmak oluyor o zaman öğelerdir stringified - hangisi ne zaman seni geçmelerine olarak bir bütün, bir değişken (örn. Remove-Item $filteredlist, ile aynı olan Remove-Item -Path $filteredlist), sağlayıcı önekinden yoksundurlar ve kayıt defteri yerel yolları olarak temsil edilirler.

Ve tam bir kayıt defteri-yerel yol gibi göz önüne alındığında HKEY_LOCAL_MACHINE\... ne bir sürücü spesifikasyonu ile ne de bir sürücü spesifikasyonu ile başlar. \ veya / gördüğünüz semptomla sonuçlanan göreceli bir yol olarak yorumlanır.

2021-11-16 21:21:42

Ayrıntılı açıklama için teşekkürler. Her iki varyant da çalışır. Aslında üçüncü bir çözüm buldum. Cevabınıza ekleyebilir misiniz, bu yüzden burada tüm seçeneklerimiz var mı? foreach ($item in $filteredList) {Remove-Item -WhatIf -Recurse Registry::$item}. Aslında Powershell'i sevmeye başlamıştım. Ama benim sürüm işe yaramadı verilen, ama ilk önerilen çözüm yok, merak ediyorum.
Gunter

Teşekkürü kabul, Gunter; ben memnunum açıklama yararlı. Açıkçası, verilen cevap çözümleri bir daha yok (döngü) daha kısa ve daha hızlıdır foreach- döngü çözümü, ikincisinin eklemeye değer olduğunu sanmıyorum. Evet, neden olduğu belli değil. $filteredList | Remove-Item -WhatIf -Recurse çalışır (bu cevaba bakın) ve geçiş yollarının etrafındaki tuhaflıklar sinir bozucu olabilir. Ancak, tüm siğillerine rağmen, Powershell'in sunabileceği çok şey var.
mklement0

Ek bağlantı için teşekkürler. Powershell cmdlet'lerinin aslında bilgileri nasıl işlediğini anlamak için biraz bilgi edinmem gerektiğini görüyorum. Ayrıca döngü çözümünün aslında daha yavaş olacağına işaret ettiğiniz için teşekkür ederiz. Gerçekten de, Powershell'in sunabileceği çok şey var. Şu anda, birkaç tıklama alan şeyleri otomatikleştirmek için gerçekten hoşuma gidiyor (hizmetleri yeniden başlatmak, kayıt defteri girdilerini silmek, explorer'ı yeniden başlatmak.exe). Bu yüzden şimdilik powershell ile bir aşk-nefret ilişkisi bekliyorum: -)
Gunter

Diğer dillerde

Bu sayfa diğer dillerde

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