windows - 在 Windows 上使用 Powershell 删除 ShellIconOverlayIdentifiers
问题描述
我目前对 Dropbox 和 Nextcloud 非常恼火,它们都与 ShellIconOverlayIdentifier 列表作斗争。当您搜索互联网时,许多人似乎都有一个问题。
现在我想将我的烦恼与学习 powershell (7.2.0) 的意图结合起来。
我从以下脚本开始,它将检索所有密钥。后来我想使用正则表达式-match
来查找我要删除的条目。现在我与两者一起工作Remove-Item -WhatIf
并Get-ItemProperty
对其进行测试。
目前我的问题是我可以按预期创建我的列表。但是当我将列表输入删除命令时,我发现找不到路径。我究竟做错了什么?
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.
显然是将路径添加为当前位置的相对路径。为什么它不解释为绝对路径?当我省略推送位置部分时,它会尝试将注册表路径添加到脚本所在的当前工作目录中。但这也是错误的。
提前感谢您的帮助。
解决方案
使用以下方法之一:
$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\...
既不以驱动器规范开头也不以\
or开头/
),它被解释为相对路径,从而导致您看到的症状。
推荐阅读
- bash - 我们可以将多个 .gz 文件压缩到 gz 文件上吗
- flutter - 无法访问 Futurebuilder 中的 Snapshot.data
- vue.js - Vuejs 获取动态表单值
- ruby-on-rails - 日志说“fe_sendauth:没有提供密码”,但 rails 控制台工作没有问题
- python - 从其他函数注释派生的 Python 类型提示
- pandas - 用零替换所有 NaN 值的函数:
- excel - 如何在循环中将多个文件附加到消息中?
- bash - 用于检查在运行命令后是否在目录上创建了新文件的 Bash 脚本
- visual-studio-code - VS Code 保持专注
- python - 如何从 googlesheets 中获取列标题以在 Python 中打印?