Kreiranje prečica pomoću Windows Script Hosta u Windowsu

  • WSH vam omogućava kreiranje .lnk i .url prečica pomoću WScript.Shell i SpecialFolders.
  • Praktični primjeri u Visual FoxPro, VB/VBA i PowerShell za implementacije.
  • MSIX+PSF strategija sa AppExecutionAlias ​​​​za stabilne, neverzionirane putanje.

prečice sa Windows Script Hostom

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.

Komande za dijagnosticiranje problema sa Windowsom 11
Vezani članak:
Komande za dijagnosticiranje problema u Windowsu 11

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

prečice sa Windows Script Hostom

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.

  Kako instalirati dodatne jezike u Windowsu 11 korak po korak

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)

prečice sa Windows Script Hostom

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.

Komande za rješavanje problema u Windowsu 11
Vezani članak:
Najbolje komande za dijagnosticiranje i rješavanje problema u Windowsu 11

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».

  Kako promijeniti orijentaciju ekrana u Windowsu 11 korak po korak

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.

  Strimovanje bez kašnjenja na Windowsu 11: kako izvući maksimum iz vašeg GPU-a

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.

Kontrolirajte procese i usluge pomoću CMD Taskkill i Sc naredbi
Vezani članak:
Kontrolirajte procese i usluge pomoću CMD-a: Taskkill i Sc naredbe

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.