- Med WSH kan du skapa .lnk- och .url-genvägar från VBScript, VBA, VB6, VFP och Power med WScript.Shell-objektet.
- I IT-distributioner avgör kontexten (användare kontra SYSTEM) om det offentliga skrivbordet eller användarskrivbordet ska användas.
- Med MSIX/PSF undviker AppExecutionAlias versionsbaserade sökvägar och underlättar permanent åtkomst.
- Ikoner, argument, snabbtangenter och fönsterformat styrs av genvägsegenskaper.
Att skapa genvägar är inte bara en bekvämlighet: det är ett sätt att automatisera uppgifter och förbättra din dagliga produktivitet. Windows. Windows Script Värd (WSH) Det erbjuder ett enkelt och kraftfullt sätt att generera länkar till program, dokument och webbadresser från flera skriptspråk.
I den här praktiska guiden sammanför vi beprövade tekniker med VBScript, PowerShell, Visual Basic, Visual FoxPro och moderna scenarier med paket MSIX och PSFMålet är att göra det möjligt för dig att välja den metod som bäst passar din miljö (slutanvändare, IT, Intune/SCCM eller paketerad) och att implementera den med tillförsikt.
Vad är Windows Script Host och varför du kanske bryr dig
Windows Script Host är den infrastruktur som låter dig köra VBScript och JScript nativt i Windows, förutom att exponera en COM-objektmodell för att automatisera systemuppgifter. WScript.Shell-objektet Det är nyckeln till att skapa skrivbordsgenvägar, genvägar till Start-menyn eller specialmappar.
WSH har varit en del av Windows sedan versioner som Windows 98 och 2000, och kan läggas till i äldre utgåvor som Windows NT 4.0 med hjälp av valfria komponenter. I moderna system är det integrerat och i praktiken räcker det att ha körbara filerna wscript.exe och cscript.exe för att starta skript.
Krav och bästa praxis innan du börjar
Innan du börjar är det en bra idé att gå igenom några grundläggande punkter. Kontrollera att WSH är tillgängligt och det finns inga policyer som blockerar skriptkörning. I företagsmiljöer kan grupprincipobjekt och antivirusinställningar påverka VBScript eller PowerShell.
Undvik att belamra skrivbordet med genvägar. Skapa endast åtkomster när de tillför värde och om du distribuerar dem centralt, definiera ett tydligt kriterium (t.ex. arbetsmappar eller appar kritiskt företag).
Om skriptet körs som SYSTEM eller i maskinkontext (Intune/SCCM), tänk noga på var du skriver .lnk: du kanske vill använda det publika skrivbordet (C:\\Användare\\Public\\Skrivbord) istället för den aktuella användarens skrivbord.
Kontrollera destinationssökväg, behörigheter och miljövariablerEtt typiskt misstag är att peka på sökvägar med ändrade versioner (Program Files\\WindowsApps) eller att använda UNC utan åtkomst från kontot som kör skriptet.
Specialmappar och hur man löser deras sökvägar
WSH löser upp speciella mappnamn till deras faktiska sökväg med hjälp av WshShell.SpecialFoldersBland de mest användbara är Skrivbord, Startmeny, Program, Start eller Favoriter, samt deras varianter för alla användare (AllaAnvändareSkrivbord, AllaAnvändareStartmeny, etc.). Detta gör att du kan vara oberoende av språket och profilens exakta struktur.
Om du arbetar med klassisk Visual Basic eller vill hämta rutter från API:et kan du använda SHGetSpecialFolderLocation/SHGetPathFromIDList för att lista sökvägar som Skrivbord, Senaste program eller Dokument. Det är användbart när du integrerar i applikationer som inte är direkt beroende av WScript-objektet.
Grundläggande mönster: Skapa genvägar med WScript.Shell
Flödet är enkelt: skapa COM-instansen, generera genvägen, fyll i egenskaperna och spara. Detta mönster upprepas i VBScript, VBA, VB6, VFP och PowerShell. med mindre syntaktiska 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önstret är likvärdigt, bara syntaxen och var du lagrar koden ändras. Du kan skapa genvägen på skrivbordet, tilldela en beskrivning, ikon, snabbtangent och fönsterstil:
' 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 också använda WScript.Shell-objektet. Idén är identisk: leta reda på Desktop, skapa .lnk och ange egenskaper som Fönsterstil, Ikonplats, Målsökväg eller tangentkombinationen.
* 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 samtliga fall är kärnan densamma: Skapa genväg, Målsökväg, SparaDärifrån kan du anpassa argumenten, ikonen, arbetskatalogen och fönsterstilen efter behov.
Argument, fönsterstil, ikoner och genvägar
När åtkomst måste starta en app med parametrar, fyll helt enkelt i .ArgumentFör processen boot i en specifik mapp, använd .Arbetskatalog med rätt väg.
För utseendet, definiera .IconPlats pekar på en .ico eller en resurs i en .exe/.dll (du kan ange indexet efter kommatecken). Öppningsbeteendet styrs med .Fönsterstil: 3 maximerade, 7 minimerade, 4 normala.
Om du vill ha en tangentkombination, använd Snabbtangent med mönstret ALT+CTRL+Bokstav (till exempel ALT+CTRL+N). Den här tilldelningen snabbar upp öppningen, men Det är inte lämpligt att tilldela för många för att inte störa systemets genvägar.
URL-genvägar (.url)
Förutom applikations-.lnk-filer kan WSH skapa .url-genvägar som öppnar standardwebbläsaren. TargetPath pekar på webbadressen och om du behöver din egen ikon kan du redigera .url-filen senare för att lägga till IconFile och 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
Denna metod är idealisk för länkar till Sharepoint, intranät eller webbapplikationer som du vill lämna till hands på användarens skrivbord.
PowerShell för IT: Intune, SCCM och storskaliga distributioner
PowerShell har åtkomst till samma COM-modell som WSH, så att du kan skapa åtkomst och distribuera den i massor. Det vanliga är att identifiera rätt skrivbord (användare eller offentlig), generera målmappar och, om nödvändigt, fästa sökvägar i Snabbåtkomst.
# 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 implementeringar med I samklangDet här mönstret låter dig skapa en mapp på skrivbordet och ge åtkomst till Edge med parametrar som en SharePoint-URL. Om körs som SYSTEM, kommer målskrivbordet att vara det offentliga, synligt för alla profiler.
En SCCMOm du föredrar att distribuera en färdig .lnk kan det lägsta kommandot vara så enkelt som att kopiera det till det offentliga skrivbordet: Kopiera-objekt \\server\\path\\access.lnk C:\\Användare\\Offentlig\\SkrivbordOm det inte visas, kontrollera dessa punkter:
- ExekveringskontextSe till att programmet körs med tillräckliga behörigheter och på den förväntade användaren/systemet.
- Åtkomst till den delade resursenDet löpande kontot måste kunna läsa UNC-sökvägen.
- Rutter med mellanslag: Omge -Path och -Destination med citationstecken.
- BithetI blandade 32/64-bitarsmiljöer bekräftar detta att det inte finns några oönskade omdirigeringar.
Fäst till snabbåtkomst med Shell.Application
Förutom skrivbordet kan du fästa mappar till Snabb åtkomst med Shell.Application COM-objektet. Detta är användbart när du skapar en bindningssökväg och vill att den ska vara tillgänglig i Utforskaren.
# 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")
}
Om du hanterar team och vill att användarna snabbt ska hitta sina genvägar, Denna lilla handling gör skillnad i deras dag till dag.
MSIX och PSF: Skapa åtkomst utan att förlita sig på versionsbaserade sökvägar
När du paketerar applikationer med MSIX, installationssökvägen inkluderar versionen (till exempel C:\\Program Files\\WindowsApps\\MyApp_1.0.0.0_x86__…). Den ändras med varje uppdatering, så det är en dålig idé att ange en .lnk med den sökvägen. Lösning: AppExecutionAliasGenom att definiera ett alias i manifestet kan du starta appen med %localappdata%\\Microsoft\\WindowsApps\\myapp.exe utan att vara bunden till versionen.
För att göra detta, lägg till namnrymderna i manifestet (uap3 och desktop) och skapa tillägget windows.appExecutionAlias pekar på paketets körbara fil. Kom ihåg att inkludera namnen i IgnorableNamespaces så att manifestet känner igen dem.
Efteråt kan du ändra programmets startpunkt till PSFLauncher32.exe/PSFLauncher64.exe (beroende på arkitekturen) och delegera skapandet av åtkomsten till ett startskript definierat i config.json med hjälp av PSF. Skriptet körs en gång vid första initialiseringen.
{
"applications": [
{
"id": "App",
"executable": "MiApp\\MiApp.exe",
"workingDirectory": "MiApp\\",
"startScript": {
"scriptPath": "createshortcut.ps1",
"runInVirtualEnvironment": false,
"waitForScriptToFinish": true,
"showWindow": false,
"runOnce": true
}
}
]
}
PowerShell createshortcut.ps1 Du kan kopiera en färdig .lnk-fil från paketet till användarens skrivbord och även lägga till en ikon i arbetsytan. Lokalcache\\Roaming som förblir stabil mellan versionerna.
# 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 den här metoden säkerställer du att åtkomsten fungerar efter en uppdatering, utan att röra .lnk i varje versionOm sökvägen pekar till aliaset (till exempel %localappdata%\\Microsoft\\WindowsApps\\myapp.exe) kommer sökvägen fortfarande att vara giltig.
Felhantering och rekommenderade valideringar
Innan du genererar .lnk-filen är det lämpligt att validera att TargetPath finns (såvida du inte använder variabler som %windir% eller alias). I VBA/VB6 kan du avisera om den körbara filen saknas eller avbryta åtgärden; i PowerShell använder du Test-Path för att kontrollera om sökvägen är tillgänglig.
Om ikonens sökväg är en .ico-nätverk, är en användbar taktik att kopiera den till användarens temp- eller APPDATA-mapp och referera till den därifrån. Så här undviker du trasiga ikoner om nätverksresursen inte är tillgänglig.
Om du behöver en egen ikon när du redigerar .url-genvägar, öppna filen igen som text och lägg till Ikonfil och Ikonindex i slutet. Detta ger dig fullständig kontroll över dess utseende utan att behöva förlita dig på en webbläsare.
När du avslutar COM, frigör objekt med ReleaseComObject i PowerShell, eller tilldela Ingenting i VB/VBA. Det är en mindre detalj, men hjälper till att undvika att resurser hänger i intensiva avrättningar.
Typiska felfall och hur man löser dem
Om en distribution av SCCM slutar med kod 0 men åtkomsten inte visas, kontrollera först målanvändaren av skrivbordetOm du körde som SYSTEM och skrev %USERPROFILE%\Desktop i den interaktiva profilen kommer du inte att se någonting. Använd C:\Users\Public\Desktop för att göra den synlig för alla.
När du genererar Edge-prompter med argument i Intune (till exempel en URL med kodade mellanslag), bekräfta att citattecknen är okej i -ShortcutArguments och texten anländer intakt. Ett enda malplacerat utrymme kan bryta .lnk:s öde.
För genvägsmappar för företag (t.ex. "SharePoint-genvägar"), skapa först mappen på rätt skrivbord, och om du vill markera den i Utforskaren, ankare till snabbåtkomst som vi har sett med Shell.Application.
Om du distribuerar den redan inbyggda .lnk-filen i ett MSIX-paket som uppdateras, peka den inte till den versionsbaserade sökvägen i WindowsApps. Använd AppExecutionAlias och kopiera ikonen från den versionerade mappen.
Användbara knep med variabler och sökvägar
För att skriva portabla skript, förlita dig på Miljövariabler%windir%, %systemroot%, %ProgramFiles% och liknande. I WSH kan du utöka dem med ExpanderaMiljösträngar, och i PowerShell kan du referera till dem via $env:VARIABLE.
När du bygger dynamiska rutter, kontrollera om arbetsmappen slutar på \ för att undvika att duplicera staplar eller att TargetPath bryts vid sammanfogning. Det är ett litet skyddsräcke som undvik subtila misstag i produktion.
För genvägar som kräver komplexa parametrar kan du överväga att skriva ett litet .cmd- eller .ps1-skript och låta genvägen peka på det. Så här förenklar du .lnk-filen och du har bättre kontroll över citat- och argumentordning.
Om du behöver snabbtangenter kan du prova att reservera kombinationer med viktiga bokstäver och undvik krockar med vanliga genvägar. I miljöer med många appar, dokumentera genvägarna så att användaren kan dra nytta av det utan försök och misstag.
Du har en rad alternativ för att skapa genvägar i Windows på ett tillförlitligt och flexibelt sätt. WSH är den gemensamma basen, och utöver det kan du välja lagret: klassiska skript, modern PowerShell eller MSIX-paketering med PSF när du letar efter repeterbara processer i stor skala. Nyckeln är att välja rätt sökväg, validera exekveringskontexten och undvika att bli låst i ömtåliga, versionsbaserade sökvägar.
Passionerad författare om bytesvärlden och tekniken i allmänhet. Jag älskar att dela med mig av min kunskap genom att skriva, och det är vad jag kommer att göra i den här bloggen, visa dig alla de mest intressanta sakerna om prylar, mjukvara, hårdvara, tekniska trender och mer. Mitt mål är att hjälpa dig att navigera i den digitala världen på ett enkelt och underhållande sätt.