Ako radite u Windowsu i trebate automatizirati zadatke, kreiranje prečica pomoću Windows Script Hosta (WSH) je vrlo brz i pouzdan resurs. Sa nekoliko COM objekata i linija koda Možete generirati .lnk i .url datoteke, kontrolne ikone, prečice na tastaturi, stilove prozora, argumente, pa čak i posebne sistemske mape.
U ovom praktičnom vodiču, objedinit ćemo, ujediniti i proširiti najbolje od nekoliko pristupa iz stvarnog svijeta: od Visual FoxPro-a i VB/VBA-a do PowerShella, kao i moderne scenarije s MSIX i PSF paketima koji koriste AppExecutionAlias. Vidjet ćete kompletne primjere, savjete, upozorenja o kompatibilnosti i rješenja za uobičajene greške u skriptama za implementaciju.
Šta je Windows Script Host i zašto ga koristiti?
Windows Script Host (WSH) je Microsoftova infrastruktura za skriptiranje koja pokreće VBScript i JScript izvorno u Windowsu, s pristupom COM metodama za automatizaciju sistema. Integriran je od Windowsa 98/2000 i može se dodati u Windows NT 4.0 korištenjem Options Packa, tako da ostaje koristan u trenutnim i naslijeđenim okruženjima.
Najčešće korištena klasa za prečice je WScript.Shell, koji izlaže metode kao što su CreateShortcut, Run, Exec, Popup, SendKeys, LogEvent, Sleep i kolekcija SpecialFolders. Pomoću njega možete: kreiranje .lnk i .url datoteka, čitanje posebnih foldera (Radna površina, Programi, Favoriti…), procesi pokretanja i još mnogo toga.
Kompatibilnost, zahtjevi i kontekst
WSH pokreće VBScript/JScript skripte i omogućava automatizaciju sa COM-om iz različitih programskih jezika, kao što su Visual FoxPro, VB6/VBA ili PowerShell (potonje putem New-Object -ComObject). Na starijim sistemima (Windows 95/NT 4.0) ovo može zahtijevati dodatnu instalaciju, dok na modernijim verzijama dolazi standardno integrirano.
Pored WScript.Shell-a, u mnogim scenarijima možete ga nadopuniti sa WshNetwork (CreateObject("WScript.Network")) za štampače, mrežne diskove i druge operacije; i sa shell32 API-jima (SHGetSpecialFolderLocation/SHGetPathFromIDList) u VB-u za rješavanje posebnih ruta s preciznošću.
Kreiranje prečica pomoću WScript.Shell-a: Opšti obrazac

Osnovni obrazac za prečicu je uvijek isti: instancirate objekat, dobijete ciljnu putanju (npr. radnu površinu) i pozovete Napravi prečicuZatim postavljate svojstva kao što su TargetPath, Arguments, IconLocation, Hotkey i WorkingDirectory, i na kraju sprema pomoću .Save().
Ovaj obrazac je repliciran u VBScript-u, PowerShell, VB/VBA i Visual FoxPro. Kolekcija PosebneFolderi("RadnaPostava") Daje vam putanju do korisnikove radne površine. Također možete ukazati na javnu radnu površinu ako vam je potrebna prečica za sve profile.
Brzi primjeri s Visual FoxPro (WSH)
Iz Visual FoxPro-a možete koristiti COM za komunikaciju sa WSH-om i kreiranje prečica na radnoj površini. Sljedeći primjeri pokazuju tipične varijante: jednostavna prečica, druga s argumentima i .URL linkom.
Primjer 1: Maksimizirana osnovna prečica s ikonom i tipkom prečice
WshShell = CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
oMyShortcut = WshShell.CreateShortcut(strDesktop + "\\Sample.lnk")
* 3=Maximizado, 7=Minimizado, 4=Normal
oMyShortcut.WindowStyle = 3
* Icono personalizado
oMyShortcut.IconLocation = "C:\\myicon.ico"
* Ejecutable de destino
oMyShortcut.TargetPath = "%windir%\\notepad.exe"
* Atajo de teclado Alt+Ctrl+F
oMyShortcut.Hotkey = "ALT+CTRL+F"
* Guardar el .lnk
oMyShortcut.Save
Ovaj obrazac kombinuje posebnu Desktop rutu sa Ciljna putanja i vizualne opcije (stil prozora i ikone), tako da je prečica spremna s globalnim prečicama.
Primjer 2: Prečica s argumentima i radnim direktorijem
WshShell = CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
oMyShortCut = WshShell.CreateShortcut(strDesktop + "\\Foxtest.lnk")
* 7=Minimizado, 0=Maximizado (ojo con la convención), 4=Normal
oMyShortCut.WindowStyle = 7
* Icono desde una ruta específica (ej. recursos del IDE)
oMyShortCut.IconLocation = HOME() + "wizards\\graphics\\builder.ico"
* Ejecutable de destino (ej. VFP)
oMyShortCut.TargetPath = "C:\\Program Files\\Microsoft Visual Studio\\VFP98\\vfp6.exe"
* Argumentos de línea de comandos
oMyShortCut.Arguments = '-c' + '"' + HOME() + 'config.fpw' + '"'
* Directorio de trabajo
oMyShortCut.WorkingDirectory = "C:\\"
* Guardar el .lnk
oMyShortCut.Save
Ključno je ovdje kombinovati Ciljna putanja, argumenti i radni direktorij za otvaranje aplikacija s parametrima, nešto vrlo korisno u alatima za razvoj ili pokretačima.
Primjer 3: Link ka URL-u na radnoj površini
WshShell = CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.URL")
oUrlLink.TargetPath = "http://www.microsoft.com"
oUrlLink.Save
Da biste pristupili web stranicama, jednostavno kreirajte .URL datoteku koja upućuje na adresu; to je brz i veoma lagan za korporativne resurse.
Specijalne putanje sa VB6/VBA i shell32 API-jima
U VB projektima možete kreirati interfejs za prikaz posebnih Windows foldera i odabir mjesta za spremanje prečice. Klasični primjeri koriste SHGetSpecialFolderLocation i SHGetPathFromIDList shell32.dll za rješavanje putanja do radne površine, programa, favorita, početka, nedavnih dokumenata i još mnogo toga.
Među najčešće korištenim identifikatorima su: CSIDL_RADNA_POVRŠINA, CSIDL_PROGRAMI, CSIDL_LIČNO, CSIDL_OMILJENI, CSIDL_POKRETANJE, CSIDL_NEDAVNI, CSIDL_STARTMENU, CSIDL_ZAJEDNIČKI_STARTMENU, CSIDL_ZAJEDNIČKI_PROGRAMI, CSIDL_ZAJEDNIČKI_POKRETANJE i CSIDL_ZAJEDNIČKI_OMILJENIS njima popunjavate ComboBox, a korisnik bira odredište prije kreiranja .lnk datoteke.
Nakon što je ruta riješena, obrazac je isti: sa KreirajObjekt("WScript.Shell") i .CreateShortcut kreirate prečicu, dodijelite .TargetPath (npr. App.Path & «\\» & App.EXENAme) i pozivate .Save da biste završili proces.
Napredni VBA predložak: Opis, ikona, prečica i stil
U Office/Access aplikacijama, VBA procedura može generirati potpune prečice sa Ciljna putanja, Argumenti, Lokacija ikone, Opis, Prečica i stil prozora. To je vrlo fleksibilna osnova za kreiranje korporativnih pokretača.
Dim wshShell As Object ' IWshShell3 (late binding)
Dim wshShortcut As Object ' IWshShortcut
Dim strFolderShortcut As String
Dim strTargetPath As String
Set wshShell = CreateObject("WScript.Shell")
strFolderShortcut = wshShell.SpecialFolders("Desktop") & "\\" & strShortcutName & ".lnk"
' Si existe un acceso anterior, eliminarlo para recrearlo con nuevos parámetros
If Not Dir(strFolderShortcut, vbNormal) = "" Then Kill (strFolderShortcut)
' Construir el destino uniendo WorkingDirectory + FileName
strTargetPath = strWorkingDirectory & IIf(Right(strWorkingDirectory, 1) = "\\", Null, "\\") & strFileName
' Validación básica cuando no se usan variables de entorno
If Not (Left(strTargetPath, 1) = "%") And Dir(strTargetPath, vbArchive) = "" Then
MsgBox "El programa de destino no existe en: " & strTargetPath, vbCritical
Else
Set wshShortcut = wshShell.CreateShortcut(strFolderShortcut)
With wshShortcut
.TargetPath = strTargetPath
If Not strArguments = "" Then .Arguments = strArguments
If Not strIconLocation = "" Then .IconLocation = strIconLocation
.WorkingDirectory = strWorkingDirectory
' 3=Maximizado, 7=Minimizado, 4=Normal
.WindowStyle = IIf(bytWindowsStyle = 0, 3, bytWindowsStyle)
If Not strDescription = "" Then .Description = strDescription
If Not strHotkey = "" Then .Hotkey = "ALT+CTRL+" & strHotkey
.Save
End With
End If
Set wshShortcut = Nothing
Set wshShell = Nothing
Ovim pristupom možete kreirati "katalog" prečica za vlastite ili aplikacije trećih strana, podešavanje ikona, argumenata i prečica bez oslanjanja na instalere.
Kreiranje prečica pomoću PowerShella (WSH putem COM-a)

PowerShell je idealan za masovna implementiranja (npr. s Intuneom) koristeći Novi-Objekat -ComObject WScript.ShellOvako kombinujemo snagu WSH-a sa modernom distribucijom i kontrolom dozvola.
Tipičan slučaj: kreirajte mapu "SharePoint Shortcuts" na radnoj površini korisnika i dodajte prečice do aplikacija ili URL-ova. Pomoću WScript.Shell-a možete konfigurirati Ciljna putanja, Argumenti, Lokacija ikone i Radni direktorij kao što biste to uradili u VBScriptu.
Tipične greške i kako ih ispraviti u stvarnom skriptu
U stvarnom Intune skriptu otkrili smo nekoliko uobičajenih problema: neinicijalizirane varijable (na primjer $DesktopDir bez dodjeljivanja na nivou skripte), nedeklarisani parametri (korišten je $ShortcutArguments, ali ga funkcija Add-Shortcut ne prima), neslaganja u nazivi foldera ("Sharepoint" vs "SharePoint") i putanje bez navodnika kada sadrže razmake.
Brzo rješenje: vratite Get-DesktopDir globalnoj ili skript varijabli, proslijedite $DesktopDir kao argument funkcijama koje ga koriste, dodajte parametar $ShortcutArguments Da biste dodali prečicu (Add-Shortcut), normalizujte naziv mape i koristite putanju spajanja (Join-Path) i navodnike na odgovarajući način.
PowerShell skripta ispravljena i robusna
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)] [String]$ShortcutTargetPath,
[Parameter(Mandatory=$true)] [String]$ShortcutDisplayName,
[Parameter(Mandatory=$false)] [Switch]$PinToStart=$false,
[Parameter(Mandatory=$false)] [String]$IconFile=$null,
[Parameter(Mandatory=$false)] [String]$ShortcutArguments=$null,
[Parameter(Mandatory=$false)] [String]$WorkingDirectory=$null
)
function Test-RunningAsSystem {
try { return ( (whoami -user) -match "S-1-5-18" ) } catch { return $false }
}
function Get-DesktopDir {
if (Test-RunningAsSystem) { Join-Path -Path $env:PUBLIC -ChildPath "Desktop" }
else { [Environment]::GetFolderPath("Desktop") }
}
function Ensure-DesktopFolder([string]$DesktopDir,[string]$FolderName) {
$target = Join-Path $DesktopDir $FolderName
if (-not (Test-Path -LiteralPath $target)) {
New-Item -Path $target -ItemType Directory -Force | Out-Null
}
return $target
}
function Add-Shortcut {
param(
[Parameter(Mandatory)] [String]$ShortcutTargetPath,
[Parameter(Mandatory)] [String]$DestinationPath,
[Parameter()] [String]$WorkingDirectory,
[Parameter()] [String]$ShortcutArguments,
[Parameter()] [String]$IconFile
)
$WshShell = New-Object -ComObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut($DestinationPath)
$Shortcut.TargetPath = $ShortcutTargetPath
if ($ShortcutArguments) { $Shortcut.Arguments = $ShortcutArguments }
if ($WorkingDirectory) { $Shortcut.WorkingDirectory = $WorkingDirectory }
if ($IconFile) { $Shortcut.IconLocation = $IconFile }
$Shortcut.Save()
[Runtime.InteropServices.Marshal]::ReleaseComObject($WshShell) | Out-Null
}
function Get-StartDir {
if (Test-RunningAsSystem) {
Join-Path $env:ALLUSERSPROFILE "Microsoft\\Windows\\Start Menu\\Programs"
} else {
Join-Path ([Environment]::GetFolderPath("StartMenu")) "Programs"
}
}
# 1) Determinar Escritorio
$DesktopDir = Get-DesktopDir
# 2) Asegurar carpeta destino coherente
$folderName = "SharePoint Shortcuts"
$ShortcutFolder = Ensure-DesktopFolder -DesktopDir $DesktopDir -FolderName $folderName
# 3) Crear acceso directo en el escritorio
$destinationPath = Join-Path -Path $ShortcutFolder -ChildPath ("{0}.lnk" -f $ShortcutDisplayName)
Add-Shortcut -DestinationPath $destinationPath -ShortcutTargetPath $ShortcutTargetPath -WorkingDirectory $WorkingDirectory -ShortcutArguments $ShortcutArguments -IconFile $IconFile
# 4) (Opcional) Crear entrada en el Menú Inicio
if ($PinToStart.IsPresent) {
$startDest = Join-Path -Path (Get-StartDir) -ChildPath ("{0}.lnk" -f $ShortcutDisplayName)
Add-Shortcut -DestinationPath $startDest -ShortcutTargetPath $ShortcutTargetPath -WorkingDirectory $WorkingDirectory -ShortcutArguments $ShortcutArguments -IconFile $IconFile
}
Pomoću ovog skripta možete pozvati nešto poput: .\u200bCreateDesktopIcon.ps1 -ShortcutTargetPath «%ProgramFiles(x86)%\Microsoft\Edge\Application\msedge.exe» -ShortcutDisplayName «File Folders» -IconFile «%systemroot%\System32\SHELL32.dll,13» -ShortcutArguments «https://tenant.sharepoint.com/sites/archive/Archive%20Folders».
Generiranje .lnk datoteke u hodu pomoću PowerShella (bez kopiranja datoteka)
Ako ne želite implementirati unaprijed napravljeni .lnk, jednostavno ga kreirajte tokom izvođenja programa koristeći WScript.ShellMinimalni primjer za javnu radnu površinu:
$shell = New-Object -ComObject WScript.Shell
$lnk = $shell.CreateShortcut("$env:PUBLIC\Desktop\Internet Explorer.lnk")
$lnk.TargetPath = "$env:ProgramFiles\Internet Explorer\iexplore.exe"
$lnk.IconLocation = "$env:SystemRoot\System32\SHELL32.dll,220"
$lnk.WorkingDirectory = "$env:ProgramFiles\Internet Explorer"
$lnk.Save()
[Runtime.InteropServices.Marshal]::ReleaseComObject($shell) | Out-Null
Vrijednost IconLocation podržava dll, ico i indeksiAko izvršna datoteka ne postoji na računaru, provjerite putanje i zamjene (npr. Edge). Ovaj obrazac funkcioniše za bilo koju korporativnu aplikaciju.
MSIX + PSF: Kreirajte prečice pomoću AppExecutionAlias
U aplikacijama paketima s MSIX-om možete izbjeći putanje s brojevima verzija korištenjem AliasIzvršavanjaAplikacijeIdeja je definirati alias u manifestu i kreirati prečicu koja pokazuje na taj alias (npr. contosoexpenses.exe), tako da ne zavise od verzionirane putanje unutar Windows aplikacija.
Korak 1. Dodajte imenske prostore u manifest vaše aplikacije: uap3 i desktop:
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
Korak 2. Deklarišite ih kao ignorisane u IgnorableNamespaces: «uap uap3 desktop rescap build» kako bi se izbjegla upozorenja tokom validacije.
Korak 3. Definirajte ekstenziju izvršnog aliasa nakon bloka VisualElements:
<Extensions>
<uap3:Extension Category="windows.appExecutionAlias" Executable="ContosoExpenses\ContosoExpenses.exe" EntryPoint="Windows.FullTrustApplication">
<uap3:AppExecutionAlias>
<desktop:ExecutionAlias Alias="contosoexpenses.exe" />
</uap3:AppExecutionAlias>
</uap3:Extension>
</Extensions>
Nakon što sačuvate i zatvorite manifest, ponovo izgradite i instalirajte paket i pokrenite aplikaciju sa aliasom (na primjer, Win+R i ukucajte contosoexpenses) da biste potvrdili da sve funkcioniše.
Korak 4. Kreirajte prečicu koristeći alias i prilagodite ikonu i svojstva. Da biste ikonu učinili nezavisnom od verzionirane mape WindowsApps, možete Kopirajte .ico datoteku u %localappdata%\Packages\{PackageId}\LocalCache\Roaming i odatle ga citirajte.
Korak 5. Integrirajte PSF u paket (PSFBinaries.zip) i, ako je primjenjivo, promijenite izvršnu datoteku iz manifesta u pokretač iz PSF-a (npr. PSFLauncher32.exe):
<Application Executable="PSFLauncher32.exe" EntryPoint="Windows.FullTrustApplication">
Korak 6. Kreirajte config.json u korijenu paketa da biste pokrenuli skriptu prilikom prvog pokretanja aplikacije (npr. da biste kopirali .lnk i .ico datoteke na Desktop i AppData):
{
"applications": [
{
"id": "App",
"executable": "ContosoExpenses\\ContosoExpenses.exe",
"workingDirectory": "ContosoExpenses\\",
"startScript": {
"scriptPath": "createshortcut.ps1",
"runInVirtualEnvironment": false,
"waitForScriptToFinish": true,
"showWindow": false,
"runOnce": true
}
}
]
}
Korak 7. Podržavajući PowerShell skript (kopirajte .lnk i ikonu korisniku):
Copy-Item "Contoso Expenses.lnk" "$env:USERPROFILE\Desktop\Contoso Expenses.lnk"
Copy-Item "contoso.ico" "$env:APPDATA\contoso.ico"
Uključite u mapu aplikacije unutar paketa: Contoso Expenses.lnk, Contoso.ico, StartingScriptWrapper.ps1 i createshortcut.ps1Dakle, pri prvom pokretanju, prečica se kreira na radnoj površini korisnika s ikonom razriješenom iz AppData.
Više korisnih stvari o WSH Shell-u i WshNetwork-u
WSH nije ograničen na prečice. Sa klasom Shell možete koristiti Aktivacija aplikacije, Pokreni, Izvršavanje, Događaj u dnevniku, Iskačući prozor, SendKeys, Posebne mape ili Spavanje za automatizaciju zadataka. A pomoću WshNetworka možete mapirati diskove, upravljati štampačima ili nabrajati mrežne veze.
Među uobičajenim praksama koje možete primijeniti: EnumPrinterConnections, AddWindowsPrinterConnection, RemovePrinterConnection, Map NetworkDrive, RemoveNetworkDrive, EnumNetworkDrives; otvaranje dijaloga za odabir foldera; čitanje i pisanje u Registar (RegRead, RegWrite, RegDelete) za inicijalizaciju programa sa sistemom ili kreiranje asocijacija datoteka; dobijanje podataka kao što su brzina procesora iz Registra; ili snimite izlaz DOS naredbi u vašu aplikaciju.
Imajte na umu da neke metode zahtijevaju povišene dozvole i da Nisu prisutne sve Shell varijante u svim Windows ili zaključanim kontekstima. Radi sigurnosti, provjerava unos i sprječava proizvoljne naredbe od nepouzdanih korisnika.
Vremenski ograničene poruke i druge brze usluge
Pored prečica, pomoću WSH-a možete prikazivati vremenski ograničene poruke pomoću popup, što je korisno za instalacijske skripte ili kratka korisnička obavještenja; i kontrolu prozora pomoću AppActivate ili PošaljiKljučeve kada nijedan drugi API nije dostupan.
Ovi mali resursi štede vrijeme u skripte za podršku, bez potrebe za kompajliranjem ad hoc uslužnih programa; i dostupni su i iz VBScript/JScript i iz PowerShella putem COM-a.
Najbolje prakse pri kreiranju prečica u Windows Script Hostu
Prije pisanja, definirajte da li prečica ide na korisnikovu radnu površinu ili na javnu. Uvijek koristite Posebne mape ili API-ji za rješavanje putanja. Navedite putanje razmacima, koristite Join-Path u PowerShellu i provjerite da li odredište postoji (ili koristite varijable okruženja poput % windir% i %systemroot%).
Ako ikona zavisi od datoteka unutar verzioniranih paketa (MSIX), postavite je na lokacije bez verzija, kao što je %localappdata%\Paketi\{IdPaketa}\LokalnaKešMemorija\RoamingA ako implementirate Intune, isprobajte skriptu kao SISTEM i kao krajnji korisnik za otkrivanje razlika u rutama i dozvolama.
Često postavljana pitanja
Ako se .lnk ne pojavi, provjerite to .Save() se zapravo izvršava, da odredišna mapa postoji, da su putanje pod navodnicima i da IconLocation pokazuje na važeći resurs. U PowerShellu oslobodite COM objekt ako trebate izbjeći brave datoteka.
Ako koristite MSIX/PSF i prečica ne radi, provjerite alias pomoću Win+R, provjerite Zanemarivi imenski prostori i ekstenziju windows.appExecutionAlias i potvrdite da je PSFLauncher32.exe (ili 64) ispravno referenciran u manifestu aplikacije.
Pomoću ovog vodiča sada možete kreirati robusne prečice u bilo kojem Windows okruženju: VFP, VB/VBA, PowerShell ili MSIX/PSFOdaberite tehniku koja najbolje odgovara vašem projektu, vodite računa o putanjama i ikonama i, prije svega, mudro automatizirajte kako biste izbjegli zatrpavanje radne površine nepotrebnim prečicama. Podijelite ovaj tutorijal i više korisnika će saznati o Windows Script Hostu.