Opret brugerdefinerede genveje med Windows Script Host

Sidste ændring: 29/09/2025
Forfatter: Isaac
  • WSH giver dig mulighed for at oprette .lnk- og .url-genveje fra VBScript, VBA, VB6, VFP og PowerShell med WScript.Shell-objektet.
  • I IT-implementeringer afgør konteksten (bruger vs. SYSTEM), om det offentlige skrivebord eller brugerens skrivebord skal bruges.
  • Med MSIX/PSF undgår AppExecutionAlias ​​versionsbaserede stier og muliggør vedvarende adgang.
  • Ikoner, argumenter, genvejstaster og vinduesstile styres af genvejsegenskaber.

Genveje i Windows med WSH

Det er ikke bare bekvemmeligt at oprette genveje: det er en måde at automatisere opgaver og forbedre din daglige produktivitet. Windows. Windows Script Vært (WSH) Det tilbyder en enkel og effektiv måde at generere links til applikationer, dokumenter og webadresser fra flere scriptsprog.

I denne praktiske guide samler vi gennemprøvede teknikker med VBScript, PowerShell, Visual Basic, Visual FoxPro og moderne scenarier med pakker MSIX og PSFMålet er at gøre det muligt for dig at vælge den tilgang, der passer bedst til dit miljø (slutbruger, IT, Intune/SCCM eller pakket), og at implementere den med selvtillid.

Hvad er Windows Script Host, og hvorfor du måske er interesseret

Windows Script Host er den infrastruktur, der giver dig mulighed for at køre VBScript og JScript native på Windows, udover at eksponere en COM-objektmodel for at automatisere systemopgaver. WScript.Shell-objektet Det er nøglen til at oprette skrivebordsgenveje, genveje til startmenuen eller særlige mapper.

WSH har været en del af Windows siden versioner som f.eks. Windows 98 og 2000, og kan tilføjes til ældre udgaver såsom Windows NT 4.0 ved hjælp af valgfrie komponenter. I moderne systemer er det integreret og i praksis er det nok at have de eksekverbare filer wscript.exe og cscript.exe for at starte scripts.

Eksempler på scripts til genveje

Krav og bedste praksis før start

Inden du går i gang, er det en god idé at gennemgå nogle grundlæggende punkter. Bekræft at WSH er tilgængelig og der er ingen politikker, der blokerer scriptkørsel. I virksomhedsmiljøer kan GPO'er og antivirusindstillinger påvirke VBScript eller PowerShell.

Undgå at rode dit skrivebord med genveje. Opret kun adgange, når de tilfører værdi og hvis du distribuerer dem centralt, skal du definere et klart kriterium (f.eks. arbejdsmapper eller apps kritisk virksomhed).

Hvis scriptet køres som SYSTEM eller i maskinkontekst (Intune/SCCM), overvej grundigt, hvor du skriver .lnk'en: du vil måske bruge det offentlige skrivebord (C:\\Brugere\\Public\\Skrivebord) i stedet for den nuværende brugers skrivebord.

Tjek destinationssti, tilladelser og miljøvariablerEn typisk fejl er at pege på stier med skiftende versioner (Program Files\\WindowsApps) eller at bruge UNC uden adgang fra den konto, der kører scriptet.

Specielle mapper og hvordan man løser deres stier

WSH omdanner specielle mappenavne til deres faktiske sti ved hjælp af WshShell.SpecialFoldersBlandt de mest nyttige er Skrivebord, StartMenu, Programmer, Opstart eller Favoritter, samt deres varianter for alle brugere (AlleBrugereSkrivebord, AlleBrugereStartMenu osv.). Dette giver dig mulighed for at være uafhængig af sproget og profilens nøjagtige struktur.

Hvis du arbejder med klassisk Visual Basic eller ønsker at hente ruter fra API'en, kan du bruge SHGetSpecialFolderLocation/SHGetPathFromIDList for at vise stier som f.eks. Skrivebord, Seneste programmer eller Dokumenter. Det er nyttigt, når du integrerer i applikationer som ikke er direkte afhængige af WScript-objektet.

Grundlæggende mønster: Oprettelse af genveje med WScript.Shell

Processen er enkel: opret COM-instansen, generer genvejen, udfyld egenskaberne, og gem. Dette mønster gentages i VBScript, VBA, VB6, VFP og PowerShell. med mindre syntaktiske variationer.

' 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 ensartet, kun syntaksen og hvor du hoster koden ændres. Du kan oprette genvejen på skrivebordet, tildele en beskrivelse, et ikon, genvejstast og vinduesstil:

' 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 Visuel FoxPro Du kan også bruge WScript.Shell-objektet. Ideen er den samme: find Desktop, opret .lnk, og angiv egenskaber som f.eks. Vinduesstil, Ikonplacering, Målsti eller tastekombinationen.

* 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 tilfælde er kernen den samme: OpretGenvej, Målsti, GemDerfra kan du tilpasse argumenterne, ikonet, arbejdsmappen og vinduesstilen efter behov.

  Sådan streamer du nemt videoer over netværket med VLC

Argumenter, vinduesstil, ikoner og genveje

Når adgang skal starte en app med parametre, skal du blot udfylde Argumenter. For processen støvle i en bestemt mappe, brug .Arbejdsmappe med den rigtige rute.

For udseendet, definer .IkonPlacering peger på en .ico eller en ressource i en .exe/.dll (du kan angive indekset efter kommaet). Åbningsadfærden styres med .Vinduestil3 maksimerede, 7 minimerede, 4 normale.

Hvis du ønsker en tastekombination, skal du bruge .Genvejstast med ALT+CTRL+Bogstav-mønsteret (for eksempel ALT+CTRL+N). Denne tildeling fremskynder åbningen, men Det er ikke tilrådeligt at tildele for mange for ikke at forstyrre systemgenveje.

URL-genveje (.url)

Ud over applikations-.lnks kan WSH oprette .url-genveje, der åbner standardbrowseren. TargetPath peger på webadressen og hvis du har brug for dit eget ikon, kan du redigere .url-filen senere for at tilføje 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 tilgang er ideel til links til SharePoint, intranet eller webapplikationer som du vil have lige ved hånden på brugerens skrivebord.

PowerShell til IT: Intune, SCCM og storstilede implementeringer

PowerShell inkorporerer adgang til den samme COM-model som WSH, så du kan oprette adgang og distribuere den i massevis. Det sædvanlige er at finde det korrekte skrivebord (bruger eller offentlig), generere destinationsmapper og om nødvendigt fastgøre stier i Hurtig adgang.

# 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 I harmoniDette mønster giver dig mulighed for at oprette en mappe på dit skrivebord og give adgang til Edge med parametre som f.eks. en SharePoint-URL. Hvis den køres som SYSTEM, vil målskrivebordet være det offentlige, synlig for alle profiler.

  Lær, hvordan du forhindrer andre i at kontrollere din Chromecast-maskine

En SCCMHvis du foretrækker at implementere en præfabrikeret .lnk, kan minimumskommandoen være så simpel som at kopiere den til det offentlige skrivebord: Kopiér-element \\server\\sti\\access.lnk C:\\Brugere\\Offentlig\\SkrivebordHvis det ikke vises, skal du kontrollere disse punkter:

  • UdførelseskontekstSørg for, at programmet kører med tilstrækkelige tilladelser og på den forventede bruger/system.
  • Adgang til den delte ressourceDen løbende konto skal kunne læse UNC-stien.
  • Ruter med mellemrum: Sæt -Path og -Destination i anførselstegn.
  • BithedBekræfter, at der ikke er uønskede omdirigeringer i blandede 32/64-bit miljøer.

Fastgør til hurtig adgang med Shell.Application

Ud over skrivebordet kan du fastgøre mapper til Hurtig adgang med Shell.Application COM-objektet. Dette er nyttigt, når du opretter en bindingssti og ønsker, at den skal være tilgængelig i Stifinder.

# 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 teams og ønsker, at brugerne hurtigt kan finde deres genveje, Denne lille handling gør en forskel i deres dag til dag.

MSIX og PSF: Oprettelse af adgang uden at være afhængig af versionsbaserede stier

Når du pakker applikationer med MSIX, installationsstien indeholder versionen (f.eks. C:\\Program Files\\WindowsApps\\MyApp_1.0.0.0_x86__…). Den ændres med hver opdatering, så det er en dårlig idé at oprette en .lnk med den sti. Løsning: AppExecutionAliasVed at definere et alias i manifestet kan du starte appen med %localappdata%\\Microsoft\\WindowsApps\\myapp.exe uden at være bundet til versionen.

For at gøre dette skal du tilføje navnerummene i manifestet (uap3 og desktop) og oprette udvidelsen windows.appExecutionAlias peger på pakkens eksekverbare fil. Husk at inkludere navnene i IgnorableNamespaces, så manifestet genkender dem.

Bagefter kan du ændre applikationens indgangspunkt til PSFLauncher32.exe/PSFLauncher64.exe (afhængigt af arkitekturen) og deleger oprettelsen af ​​adgangen til et opstartsscript defineret i config.json ved hjælp af PSF. Scriptet kø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 opretgenvej.ps1 Du kan kopiere en færdiglavet .lnk-fil fra pakken til brugerens skrivebord og også tilføje et ikon til arbejdsområdet. LokalCache\\Roaming som forbliver stabil mellem versioner.

# 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 tilgang sikrer du, at adgangen fungerer efter en opdatering, uden at røre .lnk i hver versionHvis stien peger på aliaset (f.eks. %localappdata%\\Microsoft\\WindowsApps\\myapp.exe), vil stien stadig være gyldig.

Fejlhåndtering og anbefalede valideringer

Før generering af .lnk'en anbefales det at validere, at TargetPath findes (medmindre du bruger variabler som %windir% eller aliasser). I VBA/VB6 kan du give en advarsel, hvis den eksekverbare fil mangler, eller annullere handlingen; i PowerShell skal du bruge Test-Path til at kontrollere, om stien er tilgængelig.

  Sådan bruger du FaceTime på din Windows-pc

Hvis ikonstien er en .ico-netværk, er en nyttig taktik at kopiere den til brugerens midlertidige eller APPDATA-mappe og referere til den derfra. Sådan undgår du ødelagte ikoner hvis netværksressourcen ikke er tilgængelig.

Når du redigerer .url-genveje, skal du, hvis du har brug for dit eget ikon, genåbne filen som tekst og tilføje Ikonfil og ikonindeks til sidst. Dette giver dig fuld kontrol over dens udseende uden at være afhængig af en browser.

Når du afslutter COM, frigøres objekter med ReleaseComObject i PowerShell, eller tildel Intet i VB/VBA. Det er en mindre detalje, men hjælper med at undgå at hænge ressourcer i intensive henrettelser.

Typiske fejltilfælde og hvordan man løser dem

Hvis en implementering af SCCM slutter med kode 0, men adgangen ikke vises, skal du først kontrollere målbrugeren af ​​skrivebordetHvis du kørte som SYSTEM og skrev %USERPROFILE%\Desktop i den interaktive profil, vil du ikke se noget. Brug C:\Users\Public\Desktop for at gøre den synlig for alle.

Når du genererer Edge-prompter med argumenter i Intune (f.eks. en URL med kodede mellemrum), skal du bekræfte, at anførselstegnene er fine i -ShortcutArguments, og teksten ankommer intakt. Et enkelt malplaceret rum kan ødelægge .lnk'ens skæbne.

For genvejsmapper til virksomheder (f.eks. "SharePoint-genveje") skal du først oprette mappen på det korrekte skrivebord, og hvis du vil fremhæve den i Stifinder, anker til Hurtig adgang som vi har set med Shell.Application.

Hvis du distribuerer den allerede byggede .lnk i en MSIX-pakke, der opdateres, må du ikke pege den på den versionerede sti i WindowsApps. Brug AppExecutionAlias og kopier ikonet ud af den versionsstyrede mappe.

Nyttige tricks med variabler og stier

For at skrive bærbare scripts skal du stole på miljøvariabler%windir%, %systemroot%, %ProgramFiles% og lignende. I WSH kan du udvide dem med UdvidMiljøstrenge, og i PowerShell kan du referere til dem via $env:VARIABLE.

Når du bygger dynamiske ruter, skal du kontrollere, om arbejdsmappen slutter på \ for at undgå at duplikere søjler eller at bryde TargetPath ved sammenkædning. Det er et lille rækværk, der undgå subtile fejl i produktion.

For genveje, der kræver komplekse parametre, kan du overveje at skrive et lille .cmd- eller .ps1-script og få genvejen til at pege på det. Sådan forenkler du .lnk og du har bedre kontrol over citat- og argumentrækkefølge.

Hvis du har brug for genvejstaster, kan du prøve at reservere kombinationer med betydningsfulde bogstaver og undgå sammenstød med almindelige genveje. I miljøer med mange apps skal du dokumentere genvejene, så brugeren kan drage fordel uden forsøg og fejl.

Du har en række muligheder for at oprette genveje i Windows på en pålidelig og fleksibel måde. WSH er den fælles base, og oven i det kan du vælge laget: klassiske scripts, moderne PowerShell eller MSIX-pakning med PSF, når du leder efter gentagelige processer i stor skala. Nøglen er at vælge den rigtige sti, validere udførelseskonteksten og undgå at blive låst fast i skrøbelige, versionerede stier.