- WSH дозволяє створювати скорочення .lnk та .url з VBScript, VBA, VB6, VFP та PowerShell за допомогою об'єкта WScript.Shell.
- У розгортанні ІТ контекст (користувач проти СИСТЕМИ) вирішує, чи використовувати загальнодоступний чи користувацький робочий стіл.
- У MSIX/PSF AppExecutionAlias уникає шляхів з версіями та забезпечує постійний доступ.
- Піктограми, аргументи, гарячі клавіші та стилі вікон контролюються властивостями ярликів.
Створення скорочень – це не просто зручність: це спосіб автоматизувати завдання та підвищити вашу щоденну продуктивність. Windows. Windows Script Хост (WSH) Він пропонує простий та потужний спосіб створення посилань на програми, документи та веб-адреси з кількох мов сценаріїв.
У цьому практичному посібнику ми об’єднуємо перевірені методи з VBScript, PowerShell, Visual Basic, Visual FoxPro та сучасні сценарії з пакетами MSIX та PSFМета полягає в тому, щоб ви могли обрати підхід, який найкраще відповідає вашому середовищу (кінцевий користувач, ІТ, Intune/SCCM або пакетний), та впровадити його з упевненістю.
Що таке хост сценаріїв Windows і чому це може вас цікавити
Хостинг сценаріїв Windows – це інфраструктура, яка дозволяє запускати 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Серед найкорисніших – Робочий стіл, Меню «Пуск», Програми, Автозавантаження або Вибране, а також їх варіанти для всіх користувачів (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
En 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. Ідея ідентична: знайти Desktop, створити .lnk та встановити такі властивості, як Стиль вікна, Розташування значка, Шлях цілі або комбінацію клавіш.
* 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
У всіх випадках суть однакова: СтворитиШорткут, ЦільовийШлях, ЗберегтиЗвідти налаштуйте аргументи, піктограму, робочий каталог та стиль вікна за потреби.
Аргументи, стиль вікна, значки та комбінації клавіш
Коли для доступу потрібно запустити програму з параметрами, просто заповніть АргументиДля процесу завантаження у певній папці, використовуйте .РобочийКаталог з правильним маршрутом.
Щодо зовнішнього вигляду, визначте .Розташування значка вказуючи на .ico або ресурс у .exe/.dll (можна вказати індекс після коми). Поведінка відкриття контролюється за допомогою .СтильВікна3 максимізованих, 7 мінімізованих, 4 нормальних.
Якщо вам потрібна комбінація клавіш, використовуйте .Гаряча клавіша за допомогою шаблону ALT+CTRL+літера (наприклад, 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, цільовий робочий стіл буде загальнодоступним, видимим для всіх профілів.
En SCCMЯкщо ви бажаєте розгорнути готовий файл .lnk, мінімальна команда може бути такою ж простою, як копіювання його на загальнодоступний робочий стіл: Копіювати елемент \\сервер\\шлях\\access.lnk C:\\Користувачі\\Загальнодоступний\\Робочий стілЯкщо його немає, перевірте такі пункти:
- Контекст виконанняПереконайтеся, що програма працює з достатніми правами доступу та від імені потрібного користувача/системи.
- Доступ до спільного ресурсуЗапущений обліковий запис повинен мати можливість читати UNC-шлях.
- Маршрути з пробіламиВізьміть -Шлях та -Призначення в лапки.
- РозрядністьУ змішаних 32/64-бітних середовищах підтверджує відсутність небажаних перенаправлень.
Закріпити для швидкого доступу за допомогою Shell.Application
Окрім робочого столу, ви можете закріплювати папки до Швидкий доступ за допомогою COM-об'єкта Shell.Application. Це корисно, коли ви створюєте шлях прив'язки та хочете, щоб він був доступний у Провіднику.
# 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 із цим шляхом. Рішення: Псевдонім виконання програмиВизначивши псевдонім у маніфесті, ви можете запускати програму за допомогою %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 з пакета на робочий стіл користувача, а також перенести значок у робочу область. Локальний кеш\\Роумінг який залишається стабільним між версіями.
# 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\\myapp.exe), шлях все одно буде дійсним.
Обробка помилок та рекомендовані перевірки
Перед створенням .lnk бажано перевірити, чи Цільовий шлях існує (якщо ви не використовуєте змінні, такі як %windir% або псевдоніми). У VBA/VB6 ви можете видавати сповіщення про відсутність виконуваного файлу або скасувати операцію; у PowerShell використовуйте Test-Path, щоб перевірити, чи доступний шлях.
Якщо шлях до значка є мережа .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. Використовувати псевдонім виконання програми та скопіюйте піктограму з версійної папки.
Корисні хитрощі зі змінними та шляхами
Щоб писати портативні скрипти, покладайтеся на Змінні середовища: %windir%, %systemroot%, %ProgramFiles% та подібні. У WSH ви можете розширити їх за допомогою Розгорнути рядки середовища, а в PowerShell ви можете звертатися до них через $env:VARIABLE.
Під час побудови динамічних маршрутів перевірте, чи робоча папка закінчується на \ щоб уникнути дублювання стовпців або порушення TargetPath під час конкатенації. Це невеликий бар'єр, який уникайте незначних помилок у виробництві.
Для комбінацій клавіш, що потребують складних параметрів, подумайте про написання невеликого скрипта .cmd або .ps1, і налаштуйте комбінацію клавіш, яка вказуватиме на нього. Ось як спростити .lnk і ви маєте кращий контроль над цитуванням та порядком аргументів.
Якщо вам потрібні гарячі клавіші, спробуйте зарезервувати комбінації за допомогою значущі літери та уникайте конфліктів із поширеними комбінаціями клавіш. У середовищах із багатьма програмами документуйте комбінації клавіш, щоб користувач міг скористайтеся перевагами без спроб і помилок.
У вас є ряд варіантів для створення ярликів у Windows надійним та гнучким способом. WSH – це спільна основа, а крім того, ви можете вибрати рівень: класичні скрипти, сучасний PowerShell або пакетування MSIX з PSF, якщо вам потрібні повторювані процеси у великому масштабі. Головне — вибрати правильний шлях, перевірити контекст виконання та уникнути замкненості на крихких шляхах із версіями.
Пристрасний письменник про світ байтів і технологій загалом. Я люблю ділитися своїми знаннями, пишучи, і саме це я буду робити в цьому блозі, показуватиму вам все найцікавіше про гаджети, програмне забезпечення, апаратне забезпечення, технологічні тренди тощо. Моя мета — допомогти вам орієнтуватися в цифровому світі в простий і цікавий спосіб.