gpt4 book ai didi

powershell - 如何使用 Powershell 从任务栏取消固定 "Library"文件夹?

转载 作者:行者123 更新时间:2023-12-02 06:39:16 26 4
gpt4 key购买 nike

我正在修改 Chocolatey包含 Uninstall-ChocolateyPinnedTaskBarItem 功能的脚本。

这与以下命令配合使用非常有效

# WORKS
Uninstall-ChocolateyPinnedTaskBarItem "$env:ProgramFiles\Internet Explorer\iexplore.exe"

但是它不起作用

# DOESN'T WORK
Uninstall-ChocolateyPinnedTaskBarItem "$env:SystemRoot\explorer.exe"

如何仅使用 Powershell 删除默认固定的“Library”文件夹?

这是卸载脚本。

function Uninstall-ChocolateyPinnedTaskBarItem {
<#
.SYNOPSIS
Removes an item from the task bar linking to the provided path.

.PARAMETER TargetFilePath
The path to the application that should be launched when clicking on the task bar icon.

.EXAMPLE
Uninstall-ChocolateyPinnedTaskBarItem "${env:ProgramFiles(x86)}\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"

This will remove the Visual Studio task bar icon.

#>
param(
[string] $targetFilePath
)

Write-Debug "Running 'Uninstall-ChocolateyPinnedTaskBarItem' with targetFilePath:`'$targetFilePath`'";

if (test-path($targetFilePath)) {
$verb = "Unpin from Taskbar"
$path= split-path $targetFilePath
$shell=new-object -com "Shell.Application"
$folder=$shell.Namespace($path)
$item = $folder.Parsename((split-path $targetFilePath -leaf))
$itemVerb = $item.Verbs() | ? {$_.Name.Replace("&","") -eq $verb}
if($itemVerb -eq $null){
Write-Host "TaskBar verb not found for $item. It may have already been unpinned"
} else {
$itemVerb.DoIt()
}
Write-Host "`'$targetFilePath`' has been unpinned from the task bar on your desktop"
} else {
$errorMessage = "`'$targetFilePath`' does not exist, not able to unpin from task bar"
}
if($errorMessage){
Write-Error $errorMessage
throw $errorMessage
}
}

最佳答案

在偶然发现类似问题后,我的经验使我相信此问题仅发生在 Windows 8.x 中,恕我直言,这是一个错误。

tl;dr: 在注册表项 [HKEY_CLASSES_ROOT\CLSID\{52205fd8-5dfb-447d-801a-d0b52f2e83e1} 下,添加注册表项 shellex\ContextMenuHandlers\{90AA3A4E-1CBA-4233-B8BB-535773D48449}

.reg 文件版本:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{52205fd8-5dfb-447d-801a-d0b52f2e83e1}\shellex\ContextMenuHandlers\{90AA3A4E-1CBA-4233-B8BB-535773D48449}]

免责声明:[HKEY_CLASSES_ROOT\CLSID\{52205fd8-5dfb-447d-801a-d0b52f2e83e1}] 是受 TrustedInstaller 保护的 key 。使用您的最佳判断。

<小时/>

以下是我实现这一目标的步骤:

为了开始诊断问题,我编写了这个函数来检索固定的 lnk 文件或(可选)lnk 文件的目标:

function Get-UserPinnedItems([switch]$Target)
{
$userPinnedPath = "$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\User Pinned\Taskbar"
$shellApp = New-Object -ComObject 'Shell.Application'
$items = $shellApp.Namespace($userPinnedPath).Items() | where { $_.IsLink }

if ($Target)
{
return $items | foreach { $_.GetLink.Target }
}
$items
}
<小时/>

在 Windows 8.1 上使用 -Target 开关运行上述命令,我得到以下结果:

PS> Get-UserPinnedItems -Target

Application : System.__ComObject
Parent : System.__ComObject
Name : File Explorer
Path : ::{52205FD8-5DFB-447D-801A-D0B52F2E83E1}
GetLink :
GetFolder :
IsLink : False
IsFolder : False
IsFileSystem : False
IsBrowsable : False
ModifyDate : 12/30/1899 12:00:00 AM
Size : 0
Type : System Folder

请注意,路径为 ::{52205FD8-5DFB-447D-801A-D0B52F2E83E1}。这显然是文件资源管理器的新 CLSID,但可用信息很少。在注册表(甚至互联网)中搜索该 guid 不会返回很多结果。在 Windows 7 上,我取回文件系统路径“C:\Windows\explorer.exe”,这就是为什么我认为这是 Win8 独有的问题。

现在,将项目固定/取消固定到任务栏由 IStartMenuPinnedList interface 处理其 CLSID {90AA3A4E-1CBA-4233-B8BB-535773D48449}。在注册表中搜索<​​em>this guid 会产生多个结果。大多数情况下,特定文件类型需要固定/取消固定功能。

因此,由于文件资源管理器缺少此功能,因此添加 ContextMenuHandler 似乎是一个好主意,而且果然,它就像一个魅力,至少对我来说是这样。 ymmv。如果它对其他人不起作用,也许它至少会提供一些线索。

<小时/>

旁白:OP 指出固定的“Library”文件夹是问题所在。我认为这并不完全正确,因为固定项目具有文件资源管理器 CLSID {52205FD8-5DFB-447D-801A-D0B52F2E83E1} 而不是库 CLSID {031E4825-7B94-4dc3-B131-E946B44C8DD5}。

运行 Shell:::{031E4825-7B94-4dc3-B131-E946B44C8DD5} 时,始终打开 Libraries 文件夹,运行 Shell:::{52205FD8-5DFB-447D-801A- D0B52F2E83E1} 可能会打开库或此电脑文件夹,具体取决于用户是否启用了“显示库”选项。基于此,我会将帖子重命名为“文件资源管理器”而不是“库”。另外,我会说我正在使用哪个操作系统。

关于powershell - 如何使用 Powershell 从任务栏取消固定 "Library"文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18602424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com