- WSH ви позволява да създавате .lnk и .url преки пътища от VBScript, VBA, VB6, VFP и PowerShell с обекта WScript.Shell.
- При ИТ внедряванията, контекстът (потребител срещу СИСТЕМА) решава дали да се използва публичният или потребителският работен плот.
- С MSIX/PSF, AppExecutionAlias избягва версирани пътища и улеснява постоянния достъп.
- Иконите, аргументите, клавишните комбинации и стиловете на прозорците се контролират от свойствата на клавишните комбинации.
Създаването на преки пътища не е просто удобство: това е начин за автоматизиране на задачи и подобряване на ежедневната ви производителност. Windows. Windows Сценарий Хост (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 е наличен и няма правила, които да блокират изпълнението на скриптове. В корпоративни среди, GPO и настройките на антивирусната програма могат да повлияят на VBScript или PowerShell.
Избягвайте да претрупвате работния си плот с преки пътища. Създавайте достъпи само когато добавят стойност и ако ги разпространявате централизирано, дефинирайте ясен критерий (напр. работни папки или приложения критично корпоративен).
Ако скриптът се изпълнява като СИСТЕМА или в машинен контекст (Intune/SCCM), помислете внимателно къде ще запишете .lnk файла: може да искате да използвате публичния работен плот (C:\\Users\\Public\\Desktop) вместо работния плот на текущия потребител.
Проверете път на местоназначение, разрешения и променливи на средатаТипична грешка е да се посочват пътища с променящи се версии (Program Files\\WindowsApps) или да се използва UNC без достъп от акаунта, изпълняващ скрипта.
Специални папки и как да се разрешат пътищата им
WSH преобразува имената на специални папки в действителния им път, използвайки WshShell.СпециалниПапкиСред най-полезните са 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
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
Con VisualFoxPro Можете също да използвате обекта 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
Във всички случаи ядрото е едно и също: Създаване на пряк път, Целеви път, ЗапазванеОттам персонализирайте аргументите, иконата, работната директория и стила на прозореца, ако е необходимо.
Аргументи, стил на прозореца, икони и преки пътища
Когато достъпът трябва да стартира приложение с параметри, просто попълнете АргументиЗа процеса ботуш в определена папка, използвайте .РаботнаДиректория с правилния маршрут.
За външния вид, дефинирайте .IconLocation сочейки към .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. Това е полезно, когато създавате път за свързване и искате той да е достъпен в Explorer.
# 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 файл от пакета на работния плот на потребителя, а също и да донесете икона в работното пространство. Локален кеш\\Роуминг който остава стабилен между версиите.
# 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 файла е препоръчително да се провери дали TargetPath съществува (освен ако не използвате променливи като %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 Shortcuts“) първо създайте папката на правилния работен плот и ако искате да я маркирате в Explorer, котва към бърз достъп както видяхме със Shell.Application.
Ако разпространявате вече изградения .lnk файл в MSIX пакет, който се актуализира, не го насочвайте към пътя с версии в WindowsApps. Използвайте AppExecutionAlias и копирайте иконата от версионираната папка.
Полезни трикове с променливи и пътища
За да пишете преносими скриптове, разчитайте на Променливи на средата: %windir%, %systemroot%, %ProgramFiles% и подобни. В WSH можете да ги разширите с Разгъване на низове на средата, а в PowerShell можете да се обърнете към тях чрез $env:VARIABLE.
Когато изграждате динамични маршрути, проверете дали работната папка завършва на \ за да се избегне дублиране на ленти или прекъсване на TargetPath при конкатениране. Това е малка предпазна ограда, която избягвайте дребни грешки в производството.
За преки пътища, които изискват сложни параметри, помислете за писане на малък .cmd или .ps1 скрипт и настройване на прекия път да сочи към него. Ето как опростявате .lnk файла и имате по-добър контрол върху цитирането и реда на аргументите.
Ако имате нужда от бързи клавиши, опитайте да резервирате комбинации с значими букви и избягвайте сблъсъци с често срещани преки пътища. В среди с много приложения, документирайте преките пътища, за да може потребителят възползвайте се без опити и грешки.
Имате набор от опции за създаване на преки пътища в Windows по надежден и гъвкав начин. WSH е общата база, и освен това, можете да изберете слоя: класически скриптове, модерен PowerShell или MSIX пакетиране с PSF, когато търсите повтарящи се процеси в голям мащаб. Ключът е да изберете правилния път, да валидирате контекста на изпълнение и да избегнете заключването в крехки, версирани пътища.
Страстен писател за света на байтовете и технологиите като цяло. Обичам да споделям знанията си чрез писане и това е, което ще направя в този блог, ще ви покажа всички най-интересни неща за джаджи, софтуер, хардуер, технологични тенденции и много други. Моята цел е да ви помогна да се ориентирате в дигиталния свят по лесен и забавен начин.