Закрепить/открепить ярлык в панели задач 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%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar , чтобы они закрепились на панели задач. В Windows 11 ручное копирование ярлыков в User Pinned\TaskBar также не работает (хотя фактически в этой папке хранятся ярлыки закреплённых приложений).

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

Каталог с ярлыками закрепленных приложений Windows: Quick Launch\User Pinned\TaskBar

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

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

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

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

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

$AppName = "tcpview64"
$ExePath = "C:\Tools\tcpview64.exe"
$lnkPath = "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\$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 = @"
<?xml version="1.0" encoding="utf-8"?>
<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout"
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">
<CustomTaskbarLayoutCollection PinListPlacement="Replace">
<defaultlayout:TaskbarLayout>
<taskbar:TaskbarPinList>
<taskbar:DesktopApp DesktopApplicationLinkPath="$lnkPath"/>
</taskbar:TaskbarPinList>
</defaultlayout:TaskbarLayout>
</CustomTaskbarLayoutCollection>
</LayoutModificationTemplate>
"@
$xmlPath = "$env:LOCALAPPDATA\Microsoft\Windows\Shell\LayoutModification.xml"
$xml | Out-File -FilePath $xmlPath -Encoding UTF8 -NoNewline
Remove-Item "$env:LOCALAPPDATA\Microsoft\Windows\Shell\DefaultLayouts" -Recurse -Force -ErrorAction SilentlyContinue
Stop-Process -Name explorer -Force
Start-Sleep 5
Remove-Item $xmlPath -Force -ErrorAction SilentlyContinue

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

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

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

  • Для классических Win32 приложений<taskbar:DesktopApp> (можно указать как путь к приложению, так и его AppID из результатов Get-StartApps)
  • Для приложений Microsoft Store (UWP): <taskbar:UWA> , вместо пути к приложению указывает его имя

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

Get-AppxPackage -AllUsers| select PackageFamilyName

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

$AppName = "Windows Terminal"

$AUMID = "Microsoft.WindowsTerminal_8wekyb3d8bbwe!App"

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

<taskbar:UWA AppUserModelID="$AUMID"/>

Открепить приложение в панели задач 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

Для удобства навигации пользователей часто используемые папки с помощью PowerShell можно закреплять в панели быстрого доступа (Quick Access) в Windows.


Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)