Создание пользовательских ярлыков с помощью Windows Script Host

Последнее обновление: 29/09/2025
Автор: Исаак
  • WSH позволяет создавать ярлыки .lnk и .url из VBScript, VBA, VB6, VFP и PowerShell с объектом WScript.Shell.
  • При развертывании ИТ-систем контекст (пользователь или СИСТЕМА) определяет, следует ли использовать общедоступный или пользовательский рабочий стол.
  • В MSIX/PSF AppExecutionAlias ​​позволяет избежать использования версионных путей и обеспечивает постоянный доступ.
  • Значки, аргументы, горячие клавиши и стили окон управляются свойствами сочетаний клавиш.

Ярлыки в Windows с WSH

Создание ярлыков — это не просто удобство; это способ автоматизировать задачи и повысить повседневную производительность в Windows . Windows Script Host (WSH) предлагает простой и мощный способ создания ссылок на приложения, документы и веб-адреса из различных языков сценариев.

Это практическое руководство объединяет проверенные методы с использованием VBScript, PowerShell, Visual Basic, Visual FoxPro , а также современные сценарии с пакетами MSIX и PSF . Цель — помочь вам выбрать подход, наиболее подходящий для вашей среды (конечный пользователь, ИТ-специалист, Intune/SCCM или пакетная установка), и уверенно его применять.

Что такое Windows Script Host и почему это может вас заинтересовать

Windows Script Host — это инфраструктура, позволяющая запускать VBScript и JScript непосредственно в Windows, а также предоставляющая объектную модель COM для автоматизации системных задач. Объект WScript.Shell является ключевым элементом для создания ярлыков на рабочем столе, ярлыков в меню «Пуск» и ярлыков к специальным папкам.

WSH является частью Windows начиная с таких версий, как Windows 98 и 2000 , и может быть добавлен в более старые редакции, такие как Windows NT 4.0, с помощью дополнительных компонентов. В современных системах он интегрирован , и на практике для запуска скриптов вам понадобятся только исполняемые файлы wscript.exe и cscript.exe.

Примеры скриптов для сочетаний клавиш

Требования и передовой опыт перед началом работы

Прежде чем начать, полезно ознакомиться с несколькими основными моментами. Убедитесь, что WSH доступен и что нет политик, блокирующих выполнение скриптов. В корпоративных средах групповые политики и конфигурации антивирусного программного обеспечения могут влиять на работу VBScript или PowerShell.

Избегайте загромождения рабочего стола ярлыками. Создавайте ярлыки только тогда, когда они приносят пользу , и если вы распределяете их централизованно, определите четкие критерии (например, рабочие папки или важные корпоративные приложения ).

Если скрипт запускается от имени системы или в контексте машины (Intune/SCCM), тщательно продумайте, куда вы будете записывать файл .lnk: возможно, вам стоит использовать общедоступный рабочий стол (C:\\Users\\Public\\Desktop) вместо рабочего стола текущего пользователя.

Проверьте путь назначения, права доступа и переменные среды . Распространенная ошибка — указание путей с изменяющимися версиями (Program Files\WindowsApps) или использование UNC-путей без прав доступа для учетной записи, запускающей скрипт.

Специальные папки и как определить их пути

WSH преобразует специальные имена папок в их фактические пути с помощью функции WshShell.SpecialFolders . Среди наиболее полезных папок — Desktop, StartMenu, Programs, Startup и Favorites, а также их варианты для всех пользователей (AllUsersDesktop, AllUsersStartMenu и т. д.). Это позволяет работать независимо от языка и точной структуры профиля.

Если вы работаете с классическим Visual Basic или хотите получить пути из API, вы можете использовать SHGetSpecialFolderLocation/SHGetPathFromIDList для вывода списка путей, таких как Рабочий стол, Программы или Недавние документы. Это полезно при интеграции в приложения , которые не используют объект WScript напрямую.

Базовый шаблон: создание ярлыков с помощью WScript.Shell

Процесс прост: вы создаете экземпляр COM, генерируете ярлык, заполняете свойства и сохраняете. Этот шаблон повторяется в VBScript, VBA, VB6, VFP и PowerShell с небольшими вариациями в синтаксисе.

' VBScript: acceso directo a una aplicación
Dim sh, lnk
Set sh = CreateObject("WScript.Shell")
Dim escritorio: escritorio = sh.SpecialFolders("Desktop")
Set lnk = sh.CreateShortcut(escritorio & "\\MiApp.lnk")
lnk.TargetPath = "%windir%\\notepad.exe"
lnk.IconLocation = "%windir%\\system32\\shell32.dll,0"
lnk.Arguments = ""
lnk.WorkingDirectory = "%windir%"
lnk.WindowStyle = 4 ' Normal (3 maximizada, 7 minimizada)
lnk.Save

В VBA/VB6 схема аналогична; меняются только синтаксис и место размещения кода. Вы можете создать ярлык на рабочем столе, назначить описание, значок, горячую клавишу и стиль окна.

' VBA/VB6: crear acceso con icono y hotkey
Dim sh As Object, sc As Object
Set sh = CreateObject("WScript.Shell")
Dim destino As String: destino = sh.SpecialFolders("Desktop") & "\\BlocDeNotas.lnk"
Set sc = sh.CreateShortcut(destino)
With sc
  .TargetPath = "%windir%\\system32\\notepad.exe"
  .WorkingDirectory = "%windir%\\system32"
  .IconLocation = "%windir%\\system32\\shell32.dll,2"
  .Description = "Abrir el Bloc de notas"
  .Hotkey = "ALT+CTRL+N"
  .WindowStyle = 4
  .Save
End With

В Visual FoxPro также можно использовать объект WScript.Shell. Идея та же: найти рабочий стол, создать файл .lnk и задать такие свойства, как WindowStyle, IconLocation, TargetPath или сочетание клавиш.

* Visual FoxPro: crear acceso directo de ejemplo
LOCAL sh, desk, sc
sh = CREATEOBJECT("WScript.Shell")
desk = sh.SpecialFolders("Desktop")
sc = sh.CreateShortcut(desk + "\\EjemploWSH.lnk")
sc.TargetPath = "%windir%\\notepad.exe"
sc.IconLocation = "C:\\Path\\a\\miicono.ico"
sc.Hotkey = "ALT+CTRL+F"
sc.WindowStyle = 3 && 3=max 7=min 4=normal
sc.Save

Во всех случаях суть остается той же: CreateShortcut, TargetPath, Save . После этого можно настроить параметры, значок, рабочий каталог и стиль окна по мере необходимости.

  Что такое папка inetpub в Windows? Все, что вам нужно знать и почему не стоит это удалять

Аргументы, стиль окна, значки и ярлыки

Если для запуска приложения с параметрами требуется доступ, просто заполните поле `.Arguments` . Чтобы процесс запускался в определенной папке, используйте `.WorkingDirectory` с соответствующим путем.

Для отображения задайте параметр .IconLocation , указывающий на файл .ico или ресурс в файле .exe/.dll (индекс можно указать после запятой). Поведение при открытии контролируется параметром .WindowStyle : 3 — развернутое окно, 7 — свернутое окно, 4 — обычное окно.

Если вам нужна комбинация клавиш, используйте .Hotkey с шаблоном ALT+CTRL+Letter (например, ALT+CTRL+N). Это назначение ускоряет открытие, но не рекомендуется назначать слишком много клавиш , чтобы избежать конфликта с системными сочетаниями клавиш.

Ярлыки URL (.url)

Помимо файлов .lnk приложений, WSH может создавать ярлыки .url, открывающие браузер по умолчанию. Параметр TargetPath указывает на веб-адрес , а если вам нужна пользовательская иконка, вы можете отредактировать файл .url, добавив параметры IconFile и IconIndex.

' VBScript: acceso directo a una URL
Dim sh, urlShortcut
Set sh = CreateObject("WScript.Shell")
Dim desk: desk = sh.SpecialFolders("Desktop")
Set urlShortcut = sh.CreateShortcut(desk & "\\SitioCorporativo.url")
urlShortcut.TargetPath = "https://www.ejemplo.com"
urlShortcut.Save
' (Opcional) reabrir el .url como texto y añadir:
' IconFile=C:\\Rutas\\icono.ico
' IconIndex=0

Этот подход идеально подходит для ссылок на SharePoint , интранет или веб-приложения , которые вы хотите обеспечить постоянным доступом на рабочем столе пользователя.

PowerShell для ИТ: Intune, SCCM и крупномасштабные развертывания

PowerShell использует ту же COM-модель, что и WSH, поэтому вы можете создавать ярлыки и распространять их массово. Обычный процесс включает в себя определение нужного рабочего стола (пользовательского или общего), создание папок назначения и, при необходимости, закрепление путей в функции быстрого доступа.

# PowerShell: utilidades y creación del acceso
param(
  [Parameter(Mandatory=$true)] [string]$ShortcutTargetPath,
  [Parameter(Mandatory=$true)] [string]$ShortcutDisplayName,
  [string]$IconFile = $null,
  [string]$ShortcutArguments = $null,
  [string]$WorkingDirectory = $null
)
function Test-RunningAsSystem {
  # Devuelve true si el contexto es SYSTEM (S-1-5-18)
  ((whoami -user) -match "S-1-5-18")
}
function Get-DesktopDir {
  if (Test-RunningAsSystem) {
    Join-Path $env:PUBLIC "Desktop"
  } else {
    [Environment]::GetFolderPath("Desktop")
  }
}
function New-Shortcut {
  param([string]$Target, [string]$Path, [string]$Args, [string]$Work, [string]$Icon)
  $sh = New-Object -ComObject WScript.Shell
  $lnk = $sh.CreateShortcut($Path)
  $lnk.TargetPath = $Target
  if ($Args) { $lnk.Arguments = $Args }
  if ($Work) { $lnk.WorkingDirectory = $Work }
  if ($Icon) { $lnk.IconLocation = $Icon }
  $lnk.WindowStyle = 4
  $lnk.Save()
  [Runtime.InteropServices.Marshal]::ReleaseComObject($sh) | Out-Null
}
$desk = Get-DesktopDir
$targetFolder = Join-Path $desk "SharePoint Shortcuts"
if (-not (Test-Path $targetFolder)) { New-Item -ItemType Directory -Path $targetFolder | Out-Null }
$dest = Join-Path $targetFolder ("{0}.lnk" -f $ShortcutDisplayName)
New-Shortcut -Target $ShortcutTargetPath -Path $dest -Args $ShortcutArguments -Work $WorkingDirectory -Icon $IconFile

В реализациях Intune этот шаблон позволяет создать папку на рабочем столе и хранить ярлыки Edge с такими параметрами, как URL-адрес SharePoint. При запуске от имени SYSTEM целевой рабочий стол будет общедоступным рабочим столом, видимым для всех профилей пользователей.

  Полное руководство по использованию скриптов .wsb для настройки Windows Sandbox

В SCCM , если вы предпочитаете развернуть готовый файл .lnk, простейшей командой будет его копирование на общедоступный рабочий стол: ` Copy-Item \\server\\path\\access.lnk C:\\Users\\Public\\Desktop` . Если он не отображается, проверьте следующие моменты:

  • Контекст выполнения: Убедитесь, что программа запускается с достаточными правами доступа и на ожидаемом пользователе/в системе.
  • Доступ к общему ресурсу: Текущая учетная запись должна иметь возможность читать UNC-путь.
  • Маршруты с пробелами: Заключите -Path и -Destination в кавычки.
  • Битость: В смешанных 32/64-битных средах подтверждает отсутствие нежелательных перенаправлений.

Закрепить на панели быстрого доступа с помощью Shell.Application

Помимо рабочего стола, вы можете закреплять папки в меню быстрого доступа , используя COM-объект Shell.Application. Это полезно, когда вы создаете ссылку и хотите, чтобы она была доступна в проводнике Windows.

# PowerShell: anclar carpeta a Acceso rápido
$quick = New-Object -ComObject shell.application
$toPin = Join-Path ([Environment]::GetFolderPath("Desktop")) "SharePoint Shortcuts"
$home = "shell:::{679f85cb-0220-4080-b29b-5540cc05aab6}"
if(-not ($quick.Namespace($home).Items() | Where-Object { $_.Path -eq $toPin })){
  $quick.Namespace($toPin).Self.InvokeVerb("pintohome")
}

Если вы руководите командами и хотите, чтобы пользователи быстро находили свои учетные записи, это небольшое действие может существенно облегчить им повседневную работу.

MSIX и PSF: создание доступа без использования версионных путей

При упаковке приложений с использованием MSIX путь установки включает версию (например, C:\Program Files\WindowsApps\MyApp_1.0.0.0_x86__…). Эта версия меняется с каждым обновлением, поэтому не рекомендуется указывать этот путь в файле .lnk. Решение: AppExecutionAlias . Определив псевдоним в манифесте, вы можете запускать приложение по адресу %localappdata%\Microsoft\WindowsApps\myapp.exe, не будучи привязанным к версии.

Для этого добавьте пространства имен (uap3 и desktop) в манифест и создайте расширение windows.appExecutionAlias , указывающее на исполняемый файл пакета. Не забудьте включить имена в IgnorableNamespaces, чтобы манифест их распознал.

Далее вы можете изменить точку входа приложения на PSFLauncher32.exe/PSFLauncher64.exe (в зависимости от архитектуры) и делегировать создание ярлыка скрипту автозапуска, определенному в файле config.json, используя PSF. Скрипт запускается один раз при первой инициализации.

{
  "applications": [
    {
      "id": "App",
      "executable": "MiApp\\MiApp.exe",
      "workingDirectory": "MiApp\\",
      "startScript": {
        "scriptPath": "createshortcut.ps1",
        "runInVirtualEnvironment": false,
        "waitForScriptToFinish": true,
        "showWindow": false,
        "runOnce": true
      }
    }
  ]
}

Команда PowerShell createshortcut.ps1 может скопировать предварительно подготовленный файл .lnk из пакета на рабочий стол пользователя, а также разместить значок в области LocalCache\Roaming , который остается стабильным между версиями.

# createshortcut.ps1 (dentro del paquete)
Copy-Item "Mi App.lnk" "$env:USERPROFILE\\Desktop\\Mi App.lnk" -Force
Copy-Item "miapp.ico" "$env:APPDATA\\miapp.ico" -Force

Такой подход гарантирует работоспособность доступа после обновления без изменения файла .lnk в каждой версии . Если доступ указывает на псевдоним (например, %localappdata%\\Microsoft\\WindowsApps\\miapp.exe), путь останется действительным.

Обработка ошибок и рекомендуемые проверки

Перед созданием файла .lnk рекомендуется убедиться в существовании TargetPath (если вы не используете переменные, такие как %windir% или псевдонимы). В VBA/VB6 можно вывести сообщение об отсутствии исполняемого файла или отменить операцию; в PowerShell используйте команду Test-Path, чтобы проверить доступность пути.

  Узнайте, как настроить Web Explorer на домашней ОС Windows 10.

Если путь к значку представляет собой сетевой файл .ico , полезным приемом будет скопировать его во временную папку пользователя или в папку APPDATA и ссылаться на него оттуда. Это предотвратит появление неработающих значков, если сетевой ресурс недоступен.

При редактировании файлов с URL-адресами, если вам нужна пользовательская иконка, откройте файл как текстовый и добавьте в конец IconFile и IconIndex . Это даст вам полный контроль над ее внешним видом, не завися от браузера.

После завершения работы с COM освободите объекты с помощью команды ReleaseComObject в PowerShell или присвойте значение Nothing в VB/VBA. Это незначительная деталь, но она помогает предотвратить зависание ресурсов во время ресурсоемких процессов.

Типичные случаи отказов и способы их решения

Если развертывание SCCM завершается с кодом 0, но доступ не отображается, сначала проверьте целевого пользователя рабочего стола . Если он работал от имени SYSTEM и вы введете %USERPROFILE%\\Desktop, вы ничего не увидите в интерактивном профиле. Используйте C:\\Users\\Public\\Desktop, чтобы сделать его видимым для всех.

В Intune при создании ярлыков для Edge с аргументами (например, URL-адресом, содержащим закодированные пробелы) убедитесь, что кавычки в параметре `-ShortcutArguments` указаны правильно и что текст передается без изменений. Один неправильно расположенный пробел может привести к повреждению файла .lnk.

Для корпоративных папок-ярлыков (например, «Ярлыки SharePoint») сначала создайте папку на нужном рабочем столе и, если вы хотите выделить ее в Проводнике, закрепите ее в разделе «Быстрый доступ», как мы видели на примере Shell.Application.

Если вы распространяете предварительно собранный файл .lnk в обновленном пакете MSIX, не указывайте путь к версии в папке WindowsApps. Используйте AppExecutionAlias ​​и скопируйте значок за пределы папки с версией.

Полезные приемы с переменными и путями

Для написания переносимых скриптов используйте переменные среды , такие как %windir%, %systemroot%, %ProgramFiles% и аналогичные. В WSH их можно развернуть с помощью `ExpandEnvironmentStrings` , а в PowerShell — сослаться на них с помощью `$env:VARIABLE`.

При создании динамических путей проверяйте, заканчивается ли рабочая папка обратной косой чертой (\), чтобы избежать дублирования обратных косых черт или нарушения работы TargetPath при конкатенации. Это небольшая мера предосторожности, предотвращающая незаметные ошибки в рабочей среде.

Для обращений, требующих сложных параметров, рассмотрите возможность написания небольшого скрипта .cmd или .ps1, указав в качестве точки доступа именно его. Это упростит файл .lnk и обеспечит лучший контроль над экранированием и порядком аргументов.

Если вам нужны сочетания клавиш, старайтесь резервировать комбинации, содержащие осмысленные буквы , и избегайте конфликтов с распространенными сочетаниями клавиш. В средах с большим количеством приложений документируйте сочетания клавиш, чтобы пользователи могли использовать их без проб и ошибок.

В Windows существует множество вариантов создания надежных и гибких ярлыков. WSH — это общая основа , а поверх нее можно выбрать дополнительный уровень: классические скрипты, современный PowerShell или пакеты MSIX с PSF, если вам нужны повторяемые процессы в масштабе. Ключевым моментом является выбор правильного пути, проверка контекста выполнения и отсутствие привязки к ненадежным, версионированным путям.