Закрепить/открепить ярлык в панели задач Windows 11 с помощью PowerShell

Закрепить/открепить ярлык в панели задач Windows 11 с помощью PowerShell

Иногда нужно для пользователей програмно закрепить определенные приложения или ярлыки на папки в панели задач (таскбаре) Windows. От версии к версии Windows архитектура управления закрепленными приложениями в панели задач менялась. В частности, мы столкнулись с тем, что большинство ранее используемых скриптов для закрепления/открепления иконок приложений в панели задач, которые работали в предыдущих версиях, не работают в Windows 11. В этой статье мы рассмотрим, несколько PowerShell скриптов, которые позволяют закрепить или открепить ярлыки в таскбаре Windows 11 25H2.

До версии Windows 10 21H2 для программного закрепления ярлыков в панели задач Windows можно было использовать интерфейс пространства имен
shell:::{4234d49b-0245-4df3-b780-3893943456e1}
через интерфейс Shell COM (доступен во всех версиях Windows и содержит все элементы, доступные для закрепления/открепления в панели задач). По этому пути можно даже перейти в проводнике. Однако в Windows 11 его можно использовать только для открепления ярлыков (см. ниже).

Также ранее можно было скопировать нужные ярлыки в каталог
%AppData%MicrosoftInternet ExplorerQuick LaunchUser PinnedTaskBar
, чтобы они закрепились на панели задач. В Windows 11 ручное копирование ярлыков в User PinnedTaskBar также не работает (хотя фактически в этой папке хранятся ярлыки закреплённых приложений).

Такое ощущение, что Microsoft целенаправленно закрывает все возможные программные способы закрепления ярлыков в панели задач без ведома пользователей. Предполагается, что пользователь должен сам вручную назначать закрепленные приложения.

Каталог с ярлыками закрепленных приложений Windows: Quick LaunchUser PinnedTaskBar

Закрепляем приложение в панели задач Windows с помощью PowerShell

Для централизованной настройки макета закрепленных приложений в панели задач Windows 11 можно использовать специальный
LayoutModification.xml
файл. Применить такой XML файл, который описывает закрепленные ярлыки можно через групповую политику. Однако такой подход не удобен и не гибок, когда вам нужно, к примеру, после развертывания закрепить одно приложение в таскбаре конкретного пользователя.

Закрепленные в таскбаре Windows 11 приложения

Следующий PowerShell скрипт создает ярлык (.lnk) на целевое приложение в меню Пуск (это может быть как любое установленное, так и portable приложение). После этого скрипт генерирует временный XML макет для таскбара в разметке LayoutModificationTemplate с ярлыком на приложение и сохраняет его в пользовательский профиль (
%AppData%MicrosoftWindowsShellLayoutModification.xml
). Проводник Windows после перезапуска считывает и применяет макет панели задач из XML файла.

После применения макета панели задач сбрасывается кэш шаблонов, а исходный XML удаляется, что разблокирует макет панели задач.

$AppName = "tcpview64"
$ExePath = "C:Toolstcpview64.exe"
$lnkPath = "$env:APPDATAMicrosoftWindowsStart MenuPrograms$AppName.lnk"

if (-not (Test-Path $lnkPath)) {
$WshShell = New-Object -Com WScript.Shell
$shortcut = $WshShell.CreateShortcut($lnkPath)
$shortcut.TargetPath = $ExePath
$shortcut.WorkingDirectory = Split-Path $ExePath
$shortcut.IconLocation = $ExePath
$shortcut.Save()
}
$xml = @"

xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout"
xmlns:taskbar="http://schemas.microsoft.com/Start/2014/TaskbarLayout"
xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification"
Version="1">








"@
$xmlPath = "$env:LOCALAPPDATAMicrosoftWindowsShellLayoutModification.xml"
$xml | Out-File -FilePath $xmlPath -Encoding UTF8 -NoNewline
Remove-Item "$env:LOCALAPPDATAMicrosoftWindowsShellDefaultLayouts" -Recurse -Force -ErrorAction SilentlyContinue
Stop-Process -Name explorer -Force
Start-Sleep 5
Remove-Item $xmlPath -Force -ErrorAction SilentlyContinue

PowerShell скрипт для закрепления в панели задач Windows 11 нового приложения

Такой способ закрепления позволяет уйти от жёсткой фиксации ярлыка приложения в таскбаре (как при использовании GPO). Пользователи могут самостоятельно открепить приложение, если оно им не нужно, и оно не вернется в панель задач при следующем входе.

В зависимости от типа закрепляемого приложения, в XML файле нужно использовать определенный синтаксис:

  • Для классических Win32 приложений

    (можно указать как путь к приложению, так и его AppID из результатов Get-StartApps)
  • Для приложений Microsoft Store (UWP):

    , вместо пути к приложению указывает его имя

Чтобы закрепить UWP приложение, нужно получить его имя:

Get-AppxPackage -AllUsers| select PackageFamilyName

Укажите имя и ID приложения в переменных (в этом примере мы закрепляем Windows Terminal):

$AppName = "Windows Terminal"
$AUMID = "Microsoft.WindowsTerminal_8wekyb3d8bbwe!App"

Чтобы закрепить UWP приложение, замените в XML строку

на:

Открепить приложение в панели задач Windows 11

Открепить приложение намного проще. Прежде всего нужно получить список зарегистрированных приложений, консолей управления и Microsoft Store приложений, доступных для закрепления в панели задач:

$shell = New-Object -Com Shell.Application
$shell.Namespace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items() | Select Name

PowerShell команда выводит список доступных для закрепления приложений

Скопируйте короткое имя приложения. Теперь, чтобы программно открепить приложение из панели задач, выполните такой PowerShell скрипт:

$appname = "tcpview64"
((New-Object -Com Shell.Application).NameSpace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items() | ?{$_.Name -eq $appname}).Verbs() | ?{$_.Name.replace('&','') -match 'Unpin from taskbar'} | %{$_.DoIt(); $exec = $true}

Как вы видите, закрепленное приложение исчезло из панели задач.

Открепить из панели задач ярлык определенного приложения с помощью PowerShell

Windows 11
Закрепить/открепить ярлык в панели задач Windows 11 с помощью PowerShell