我目前對 Dropbox 和 Nextcloud 非常惱火,它們都在與 ShellIconOverlayIdentifier 串列作斗爭。當您搜索互聯網時,許多人似乎都有一個問題。
現在我想將我的煩惱與我學習 powershell (7.2.0) 的意圖結合起來。
我從以下腳本開始,它將檢索所有密鑰。后來我想使用 regex via-match來查找我想洗掉的條目。現在我同時使用兩者Remove-Item -WhatIf并對其Get-ItemProperty進行測驗。
目前我的問題是我可以按預期創建我的串列。但是當我將串列輸入到 remove 命令中時,我發現找不到路徑。我究竟做錯了什么?
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
錯誤顯然是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.它將路徑添加為當前位置的相對路徑。為什么它不解釋為絕對路徑?當我省略 push-location 部分時,它會嘗試將注冊表路徑添加到腳本所在的當前作業目錄中。但這也是錯誤的。
提前感謝您的幫助。
uj5u.com熱心網友回復:
使用以下方法之一:
$filteredList | Remove-Item -WhatIf -Recurse
# Alternatively:
Remove-Item -LiteralPath $filteredList.PSPath -WhatIf -Recurse
上面的命令確保注冊表項(鍵)通過它們的屬性被其完整的、提供者限定的路徑系結到Remove-Item的-LiteralPath引數.PSPath;在注冊表路徑的情況下,路徑的提供者前綴是Microsoft.PowerShell.Core\Registry::(或者,如果識別源模塊也不是必需的,則Registry::在您的Push-Location呼叫中使用)
這似乎是發生的是,當專案被字串化-這是當你通過他們發生了什么作為一個整體,作為一個引數(例如Remove-Item $filteredlist,這是一樣的Remove-Item -Path $filteredlist),他們缺乏提供商前綴,并表示為注冊表母語路徑。
考慮到完整的注冊表本機路徑,例如HKEY_LOCAL_MACHINE\...既不以驅動器規范開頭也不以\或開頭/,它被解釋為相對路徑,從而導致您看到的癥狀。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/359984.html
下一篇:MSTeams等應用程式如何更新
