Lag egendefinerte snarveier med Windows Script Host

Siste oppdatering: 29/09/2025
Forfatter: Isaac
  • Med WSH kan du lage .lnk- og .url-snarveier fra VBScript, VBA, VB6, VFP og PowerShell med WScript.Shell-objektet.
  • I IT-distribusjoner avgjør konteksten (bruker vs. SYSTEM) om det offentlige skrivebordet eller brukerskrivebordet skal brukes.
  • Med MSIX/PSF unngår AppExecutionAlias ​​versjonerte stier og legger til rette for vedvarende tilgang.
  • Ikoner, argumenter, hurtigtaster og vindusstiler styres av snarveiegenskaper.

Snarveier i Windows med WSH

Å lage snarveier er ikke bare en bekvemmelighet: det er en måte å automatisere oppgaver og forbedre den daglige produktiviteten. Windows. Windows Script Vert (WSH) Den tilbyr en enkel og kraftig måte å generere lenker til applikasjoner, dokumenter og nettadresser fra flere skriptspråk.

I denne praktiske veiledningen samler vi velprøvde teknikker med VBScript, PowerShell, Visual Basic, Visual FoxPro og moderne scenarier med pakker MSIX og PSFMålet er å gjøre det mulig for deg å velge den tilnærmingen som passer best til miljøet ditt (sluttbruker, IT, Intune/SCCM eller pakket), og å implementere den med trygghet.

Hva er Windows Script Host og hvorfor du kanskje bryr deg

Windows Script Host er infrastrukturen som lar deg kjøre VBScript og JScript innebygd i Windows, i tillegg til å eksponere en COM-objektmodell for å automatisere systemoppgaver. WScript.Shell-objektet Det er nøkkelbrikken for å lage snarveier på skrivebordet, snarveier på Start-menyen eller spesielle mapper.

WSH har vært en del av Windows siden versjoner som Windows 98 og 2000, og kan legges til eldre utgaver som Windows NT 4.0 ved hjelp av valgfrie komponenter. I moderne systemer kommer den integrert og i praksis er det nok å ha kjørbare filene wscript.exe og cscript.exe for å starte skript.

Eksempler på skript for snarveier

Krav og beste praksis før oppstart

Før du starter, er det lurt å gjennomgå noen grunnleggende punkter. Bekreft at WSH er tilgjengelig og det finnes ingen policyer som blokkerer skriptkjøring. I bedriftsmiljøer kan gruppepolicyobjekter og antivirusinnstillinger påvirke VBScript eller PowerShell.

Unngå å fylle skrivebordet med snarveier. Opprett kun tilganger når de tilfører verdi og hvis du distribuerer dem sentralt, definer et tydelig kriterium (f.eks. arbeidsmapper eller apps kritisk bedrift).

Hvis skriptet kjøres som SYSTEM eller i maskinkontekst (Intune/SCCM), tenk nøye gjennom hvor du skriver .lnk-filen: du bør kanskje bruke det offentlige skrivebordet (C:\\Brukere\\Publikt\\Skrivebord) i stedet for den nåværende brukerens skrivebord.

Undersøk destinasjonssti, tillatelser og miljøvariablerEn typisk feil er å peke på stier med endrede versjoner (Programfiler\\WindowsApps) eller å bruke UNC uten tilgang fra kontoen som kjører skriptet.

Spesielle mapper og hvordan du løser stiene deres

WSH løser spesielle mappenavn til deres faktiske sti ved hjelp av WshShell.SpesialmapperBlant de mest nyttige er Skrivebord, Startmeny, Programmer, Oppstart eller Favoritter, samt variantene deres for alle brukere (AlleBrukereSkrivebord, AlleBrukereStartmeny osv.). Dette lar deg være uavhengig av språket og den nøyaktige strukturen til profilen.

Hvis du jobber med klassisk Visual Basic eller ønsker å hente ruter fra API-et, kan du bruke SHGetSpesialmappeplassering/SHGetPathFromIDList for å liste opp stier som Skrivebord, Nylige programmer eller Dokumenter. Det er nyttig når du integrerer i applikasjoner som ikke er direkte avhengige av WScript-objektet.

Grunnleggende mønster: Lage snarveier med WScript.Shell

Flyten er enkel: opprett COM-instansen, generer snarveien, fyll ut egenskapene og lagre. Dette mønsteret gjentas i VBScript, VBA, VB6, VFP og PowerShell. med mindre syntaktiske variasjoner.

' 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 Mønsteret er tilsvarende, bare syntaksen og hvor du er vert for koden endres. Du kan opprette snarveien på skrivebordet, tilordne en beskrivelse, et ikon, hurtigtast og vindusstil:

' 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

med Visual FoxPro Du kan også bruke WScript.Shell-objektet. Ideen er identisk: finn Desktop, opprett .lnk og angi egenskaper som Vindusstil, ikonplassering, målbane eller tastekombinasjonen.

* 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

I alle tilfeller er kjernen den samme: OpprettSnarvei, Målsti, LagreDerfra kan du tilpasse argumentene, ikonet, arbeidskatalogen og vindusstilen etter behov.

  Hvordan enkelt streame videoer over nettverket med VLC

Argumenter, vindusstil, ikoner og snarveier

Når tilgang må starte en app med parametere, fyller du bare ut .ArgumenterFor prosessen boot i en bestemt mappe, bruk .WorkingDirectory med riktig rute.

For utseendet, definer .IkonPlassering peker til en .ico eller en ressurs i en .exe/.dll (du kan spesifisere indeksen etter kommaet). Åpningsoppførselen styres med .WindowStyle: 3 maksimert, 7 minimert, 4 normal.

Hvis du vil ha en tastekombinasjon, bruk .Hurtigtast med ALT+CTRL+Bokstav-mønsteret (for eksempel ALT+CTRL+N). Denne tilordningen fremskynder åpningen, men Det er ikke tilrådelig å tildele for mange for ikke å forstyrre systemsnarveier.

URL-snarveier (.url)

I tillegg til applikasjons-.lnk-filer, kan WSH opprette .url-snarveier som åpner standardnettleseren. TargetPath peker til nettadressen og hvis du trenger ditt eget ikon, kan du redigere .url-filen senere for å legge til IconFile og 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

Denne tilnærmingen er ideell for lenker til Sharepoint, intranett eller webapplikasjoner som du vil legge igjen for hånden på brukerens skrivebord.

PowerShell for IT: Intune, SCCM og storskala distribusjoner

PowerShell har tilgang til samme COM-modell som WSH, slik at du kan opprette tilgang og distribuere den i massevis. Det vanlige er å finne riktig skrivebord (bruker eller offentlig), generer målmapper og, om nødvendig, fest stier i Hurtigtilgang.

# 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

I implementeringer med På bølgelengdeDette mønsteret lar deg opprette en mappe på skrivebordet og gi tilgang til Edge med parametere som en SharePoint-URL. Hvis kjøres som SYSTEM, vil målskrivebordet være det offentlige, synlig for alle profiler.

  Finn ut hvordan du hindrer andre i å kontrollere Chromecast-maskinen din

En SCCMHvis du foretrekker å distribuere en ferdiglaget .lnk, kan minimumskommandoen være så enkel som å kopiere den til det offentlige skrivebordet: Kopier-element \\server\\sti\\access.lnk C:\\Brukere\\Offentlig\\SkrivebordHvis det ikke vises, sjekk disse punktene:

  • UtførelseskontekstSørg for at programmet kjører med tilstrekkelige tillatelser og på den forventede brukeren/systemet.
  • Tilgang til den delte ressursenDen løpende kontoen må kunne lese UNC-banen.
  • Ruter med mellomrom: Sett -Path og -Destination i anførselstegn.
  • BithetBekrefter at det ikke finnes uønskede omdirigeringer i blandede 32/64-bits miljøer.

Fest til hurtigtilgang med Shell.Application

I tillegg til skrivebordet kan du feste mapper til Rask tilgang med Shell.Application COM-objektet. Dette er nyttig når du oppretter en bindingsbane og vil at den skal være tilgjengelig i Utforsker.

# 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")
}

Hvis du administrerer team og ønsker at brukerne raskt skal finne snarveiene sine, Denne lille handlingen utgjør en forskjell i deres daglige.

MSIX og PSF: Opprett tilgang uten å være avhengig av versjonerte stier

Når du pakker applikasjoner med MSIX, installasjonsstien inkluderer versjonen (for eksempel C:\\Program Files\\WindowsApps\\MyApp_1.0.0.0_x86__…). Den endres med hver oppdatering, så det er en dårlig idé å sette en .lnk med den stien. Løsning: AppExecutionAliasVed å definere et alias i manifestet kan du starte appen med %localappdata%\\Microsoft\\WindowsApps\\myapp.exe uten å være knyttet til versjonen.

For å gjøre dette, legg til navnerommene i manifestet (uap3 og desktop) og opprett utvidelsen. windows.appExecutionAlias peker til pakkens kjørbare fil. Husk å inkludere navnene i IgnorableNamespaces slik at manifestet gjenkjenner dem.

Etterpå kan du endre applikasjonens inngangspunkt til PSFLauncher32.exe/PSFLauncher64.exe (avhengig av arkitekturen) og deleger opprettelsen av tilgangen til et oppstartsskript definert i config.json ved hjelp av PSF. Skriptet kjører én gang ved første initialisering.

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

PowerShell opprett snarvei.ps1 Du kan kopiere en ferdiglaget .lnk-fil fra pakken til brukerens skrivebord og også hente et ikon til arbeidsområdet. Lokalbuffer\\Roaming som holder seg stabil mellom versjoner.

# 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

Med denne tilnærmingen sikrer du at tilgangen fungerer etter en oppdatering, uten å berøre .lnk i hver versjonHvis banen peker til aliaset (for eksempel %localappdata%\\Microsoft\\WindowsApps\\myapp.exe), vil banen fortsatt være gyldig.

Feilhåndtering og anbefalte valideringer

Før du genererer .lnk-filen, anbefales det å bekrefte at TargetPath finnes (med mindre du bruker variabler som %windir% eller aliaser). I VBA/VB6 kan du varsle hvis den kjørbare filen mangler eller avbryte operasjonen; i PowerShell bruker du Test-Path for å sjekke om banen er tilgjengelig.

  Slik bruker du FaceTime på din Windows-PC

Hvis ikonbanen er en .ico-nettverk, er en nyttig taktikk å kopiere den til brukerens temp- eller APPDATA-mappe, og referere til den derfra. Slik unngår du ødelagte ikoner hvis nettverksressursen ikke er tilgjengelig.

Når du redigerer .url-snarveier, og du trenger ditt eget ikon, åpner du filen på nytt som tekst og legger til Ikonfil og ikonindeks på slutten. Dette gir deg full kontroll over utseendet uten å være avhengig av en nettleser.

Når du avslutter COM, frigjør objekter med ReleaseComObject i PowerShell, eller tilordne Ingenting i VB/VBA. Det er en liten detalj, men bidrar til å unngå å henge ressurser i intensive henrettelser.

Typiske feiltilfeller og hvordan man løser dem

Hvis en distribusjon av SCCM slutter med kode 0, men tilgangen ikke vises, må du først sjekke målbrukeren av skrivebordetHvis du kjørte som SYSTEM og skrev inn %USERPROFILE%\Desktop i den interaktive profilen, vil du ikke se noe. Bruk C:\Users\Public\Desktop for å gjøre den synlig for alle.

Når du genererer Edge-ledetekster med argumenter i Intune (for eksempel en URL med kodede mellomrom), må du bekrefte at anførselstegnene er greie i -ShortcutArguments og teksten ankommer intakt. En enkelt plass malplassert kan ødelegge skjebnen til .lnk.

For snarveismapper for bedrifter (f.eks. «SharePoint-snarveier») må du først opprette mappen på riktig skrivebord, og hvis du vil markere den i Utforsker, anker til Hurtigtilgang som vi har sett med Shell.Application.

Hvis du distribuerer den allerede innebygde .lnk-filen i en MSIX-pakke som oppdateres, må du ikke peke den til den versjonerte banen i WindowsApps. Bruk AppExecutionAlias og kopier ikonet ut av den versjonerte mappen.

Nyttige triks med variabler og stier

For å skrive bærbare skript, stol på Miljøvariabler%windir%, %systemroot%, %ProgramFiles% og lignende. I WSH kan du utvide dem med UtvidMiljøstrenger, og i PowerShell kan du referere til dem via $env:VARIABLE.

Når du bygger dynamiske ruter, sjekk om arbeidsmappen slutter på \ for å unngå duplisering av stolper eller å bryte TargetPath ved sammenkobling. Det er et lite rekkverk som unngå subtile feil i produksjon.

For snarveier som krever komplekse parametere, bør du vurdere å skrive et lite .cmd- eller .ps1-skript og la snarveien peke til det. Slik forenkler du .lnk-filen og du har bedre kontroll over sitering og argumentrekkefølge.

Hvis du trenger hurtigtaster, kan du prøve å reservere kombinasjoner med viktige bokstaver og unngå kollisjoner med vanlige snarveier. I miljøer med mange apper, dokumenter snarveiene slik at brukeren kan dra nytte av det uten prøving og feiling.

Du har en rekke alternativer for å lage snarveier i Windows på en pålitelig og fleksibel måte. WSH er den felles basen, og i tillegg til det kan du velge laget: klassiske skript, moderne PowerShell eller MSIX-pakking med PSF når du er ute etter repeterbare prosesser i stor skala. Nøkkelen er å velge riktig bane, validere utførelseskonteksten og unngå å bli låst i skjøre, versjonerte baner.