Закрепление приложения

  1. Создаём ярлык в меню Пуск (если его ещё нет).
$AppName = "TcpView"
$ExePath = "C:\Tools\tcpview.exe"
$LnkPath = "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\$AppName.lnk"

if (-not (Test-Path $LnkPath)) {
$shell = New-Object -ComObject WScript.Shell
$shortcut = $shell.CreateShortcut($LnkPath)
$shortcut.TargetPath = $ExePath
$shortcut.WorkingDirectory = Split-Path $ExePath
$shortcut.IconLocation = $ExePath
$shortcut.Save()
}

  1. Генерируем временный LayoutModification.xml с указанием только что созданного ярлыка.
$xml = @"
<?xml version="1.0" encoding="utf-8"?>
<LayoutModificationTemplate xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification"
Version="1">
<CustomTaskbarLayoutCollection PinListPlacement="Replace">
<defaultlayout:TaskbarLayout xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout">
<taskbar:TaskbarPinList xmlns:taskbar="http://schemas.microsoft.com/Start/2014/TaskbarLayout">
<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
  1. Применяем макет - принудительно перезапускаем проводник, затем удаляем файл, чтобы не оставлять "жёсткую" привязку.
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

После этого ярлык появится в панели задач, но пользователь может его снять без риска автоматического возврата.

UWP‑приложения

Для приложений из Microsoft Store вместо <taskbar:DesktopApp> используется <taskbar:UWA> и указывается AppUserModelID:

$AUMID = "Microsoft.WindowsTerminal_8wekyb3d8bbwe!App"
# в XML заменить строку на:
<taskbar:UWA AppUserModelID="$AUMID"/>

Получить AUMID можно так:

Get-AppxPackage -AllUsers | Where-Object {$_.Name -like "*Terminal*"} |
Select-Object -ExpandProperty PackageFamilyName

Открепление приложения

  1. Получить список закрепляемых элементов (работает и в Windows 11).
(New-Object -ComObject Shell.Application).Namespace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items() |
Select-Object -ExpandProperty Name
  1. Снять закрепление по имени ярлыка.
$app = "TcpView"
$items = (New-Object -ComObject Shell.Application).Namespace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items()
$target = $items | Where-Object {$_.Name -eq $app}
$verb = $target.Verbs() | Where-Object {$_.Name -replace '&','' -match 'Unpin from taskbar'}
if ($verb) { $verb.DoIt() }

После выполнения ярлык исчезнет из панели задач.

Кратко

Действие Как делаем Что получаем
Закрепить Win32‑приложение Создаём .lnk → XML → перезапуск Explorer Ярлык в таскбаре, пользователь может снять
Закрепить UWP‑приложение Получаем AUMID → XML с <taskbar:UWA> Тот же результат, но для Store‑приложений
Открепить Список через shell:::{4234d49b-...} → команда Unpin Ярлык удаляется из панели задач

Эти скрипты работают в Windows 11 25H2 и позволяют автоматизировать настройку таскбара без необходимости менять групповые политики или копировать файлы в User Pinned\TaskBar.

Добавить комментарий

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