You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10下PowerShell固定/取消固定任务栏脚本失效求助

解决Windows 10下PowerShell批量固定/取消固定任务栏程序的问题

我太懂这种无奈了——Win7里跑的好好的脚本,升级Win10后直接哑火,毕竟微软悄悄改了任务栏固定的底层逻辑。下面给你一套能在Win10正常工作的方案,完美支持批量操作:

问题根源

Win7里咱们能直接通过Shell.Application找到名为Pin to Tas&kbar的操作指令,但Win10不仅改了这个指令的显示名称(中文/英文系统还不一样),连COM对象调用的兼容性也有调整,32位PowerShell甚至可能找不到64位程序的操作选项。

可用脚本实现

1. 单个程序固定到任务栏

function Pin-ToTaskbar {
    param(
        [Parameter(Mandatory=$true)]
        [string]$FilePath
    )

    # 先校验文件是否存在
    if (-not (Test-Path $FilePath)) {
        Write-Error "目标文件不存在: $FilePath"
        return
    }

    # 初始化Shell对象
    $shell = New-Object -ComObject Shell.Application
    $folder = $shell.Namespace((Split-Path $FilePath))
    $item = $folder.ParseName((Split-Path $FilePath -Leaf))

    # 匹配Win10的固定指令(兼容中英文系统)
    $verb = $item.Verbs() | Where-Object {
        $_.Name -eq '固定到任务栏' -or
        $_.Name -eq 'Pin to taskbar'
    }

    if ($verb) {
        $verb.DoIt()
        Write-Host "已成功固定: $FilePath"
    } else {
        # 备用方案:直接创建任务栏快捷方式(批量操作更稳定)
        $shortcutDir = "$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
        $shortcutPath = Join-Path $shortcutDir "$(Split-Path $FilePath -Leaf).lnk"
        
        if (-not (Test-Path $shortcutPath)) {
            $wshShell = New-Object -ComObject WScript.Shell
            $shortcut = $wshShell.CreateShortcut($shortcutPath)
            $shortcut.TargetPath = $FilePath
            $shortcut.Save()
            Write-Host "通过快捷方式完成固定: $FilePath"
        }
    }

    # 释放COM对象避免内存泄漏
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($shell) | Out-Null
    [System.GC]::Collect()
}

# 调用示例
Pin-ToTaskbar -FilePath "C:\Program Files\Internet Explorer\iexplore.exe"

2. 单个程序取消固定任务栏

function Unpin-FromTaskbar {
    param(
        [Parameter(Mandatory=$true)]
        [string]$FilePath
    )

    $shell = New-Object -ComObject Shell.Application
    $folder = $shell.Namespace((Split-Path $FilePath))
    $item = $folder.ParseName((Split-Path $FilePath -Leaf))

    # 匹配Win10的取消固定指令(兼容中英文系统)
    $verb = $item.Verbs() | Where-Object {
        $_.Name -eq '从任务栏取消固定' -or
        $_.Name -eq 'Unpin from taskbar'
    }

    if ($verb) {
        $verb.DoIt()
        Write-Host "已成功取消固定: $FilePath"
    } else {
        # 备用方案:直接删除任务栏快捷方式
        $shortcutPath = "$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\$(Split-Path $FilePath -Leaf).lnk"
        if (Test-Path $shortcutPath) {
            Remove-Item $shortcutPath -Force
            Write-Host "通过删除快捷方式完成取消固定: $FilePath"
        }
    }

    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($shell) | Out-Null
    [System.GC]::Collect()
}

# 调用示例
Unpin-FromTaskbar -FilePath "C:\Program Files\Internet Explorer\iexplore.exe"

3. 批量处理示例

如果要一次性处理多个程序,直接把路径放进数组循环调用就行:

# 批量固定的程序路径列表
$appsToPin = @(
    "C:\Program Files\Internet Explorer\iexplore.exe",
    "C:\Windows\notepad.exe",
    "C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE"
)

foreach ($app in $appsToPin) {
    Pin-ToTaskbar -FilePath $app
}

注意事项

  • 尽量用当前用户身份运行PowerShell,管理员权限可能会导致操作失效
  • 脚本已经兼容中英文系统的指令名称,不用手动修改
  • 快捷方式方案比COM对象调用更稳定,适合批量操作场景

内容的提问来源于stack exchange,提问作者Lisbon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:25:13