Egyéni parancsikonok létrehozása a Windows Script Host segítségével

Utolsó frissítés: 29/09/2025
Szerző: Izsák
  • A WSH lehetővé teszi .lnk és .url parancsikonok létrehozását VBScript, VBA, VB6, VFP és más nyelvekből. PowerShell a WScript.Shell objektummal.
  • IT telepítéseknél a kontextus (felhasználó vs. RENDSZER) dönti el, hogy a nyilvános vagy a felhasználói asztalt használják-e.
  • Az MSIX/PSF használatával az AppExecutionAlias ​​​​elkerüli a verziózott elérési utakat, és lehetővé teszi az állandó hozzáférést.
  • Az ikonokat, argumentumokat, gyorsbillentyűket és ablakstílusokat a gyorsbillentyűk tulajdonságai vezérlik.

Windows gyorsbillentyűk WSH-val

A parancsikonok létrehozása nem csupán kényelem: egy módja a feladatok automatizálásának és a mindennapi termelékenység javításának. Windows. Windows Forgatókönyv Gazdagép (WSH) Egyszerű és hatékony módszert kínál alkalmazásokhoz, dokumentumokhoz és webcímekhez vezető linkek létrehozására több szkriptnyelvből.

Ebben a gyakorlati útmutatóban bevált technikákat gyűjtünk össze VBScript, PowerShell, Visual Basic, Visual FoxPro és modern forgatókönyvek csomagokkal MSIX és PSFA cél az, hogy kiválaszthasd a környezetedhez (végfelhasználó, IT, Intune/SCCM vagy csomagos) leginkább illeszkedő megközelítést, és magabiztosan megvalósíthasd azt.

Mi a Windows Script Host, és miért érdekelheti?

A Windows Script Host az az infrastruktúra, amely lehetővé teszi a futtatását VBScript és JScript natívan Windows rendszeren, amellett, hogy egy COM objektummodellt is elérhetővé tesz a rendszerfeladatok automatizálása érdekében. A WScript.Shell objektum Ez a kulcsfontosságú elem az asztali parancsikonok, a Start menü parancsikonjai vagy a speciális mappák létrehozásához.

A WSH a Windows része volt olyan verziók óta, mint például Windows 98 és 2000, és opcionális komponensek segítségével hozzáadható régebbi kiadásokhoz, például a Windows NT 4.0-hoz. A modern rendszerekben integrálva van és a gyakorlatban elegendő a wscript.exe és a cscript.exe futtatható fájlok megléte a szkriptek elindításához.

Példák parancsfájlokra a gyorsbillentyűkhöz

Követelmények és ajánlott gyakorlatok a kezdés előtt

Mielőtt belekezdenénk, érdemes áttekinteni néhány alapvető pontot. Ellenőrizze, hogy a WSH elérhető-e és nincsenek olyan szabályzatok, amelyek blokkolnák a szkriptek végrehajtását. Vállalati környezetekben a csoportházirendek és a víruskereső beállítások befolyásolhatják a VBScript vagy a PowerShell működését.

Kerüld az asztalod parancsikonokkal való elárasztását. Csak akkor hozz létre hozzáféréseket, ha azok értéket adnak hozzá és ha központilag terjeszted őket, határozz meg egyértelmű kritériumot (pl. munkamappák vagy alkalmazások kritikus vállalati).

Ha a szkriptet úgy futtatjuk, mint RENDSZER vagy gépi kontextusban (Intune/SCCM) esetén gondold át alaposan, hová írod az .lnk fájlt: érdemes lehet a nyilvános asztalt (C:\\Users\\Public\\Desktop) használni az aktuális felhasználó asztala helyett.

Ellenőrizd a célútvonal, jogosultságok és környezeti változókTipikus hiba, hogy változó verziójú elérési utakra mutatnak (Program Files\\WindowsApps), vagy UNC-t használnak anélkül, hogy a szkriptet futtató fiókból hozzáférnének.

Speciális mappák és az elérési útjaik feloldása

A WSH a speciális mappaneveket a tényleges elérési útjukra oldja fel a következő használatával: WshShell.SpecialFoldersA leghasznosabbak közé tartozik az Asztal, a StartMenu, a Programok, az Indítópult vagy a Kedvencek, valamint ezek minden felhasználó számára elérhető változatai (AllUsersDesktop, AllUsersStartMenu stb.). Ez lehetővé teszi, hogy független legyél a nyelv és a profil pontos szerkezete.

Ha klasszikus Visual Basic-kel dolgozol, vagy API-ból szeretnél útvonalakat lekérni, használhatod a következőt: SHGetSpecialFolderLocation/SHGetPathFromIDList olyan elérési utak listázásához, mint az Asztal, Legutóbbi programok vagy Dokumentumok. Hasznos, ha alkalmazásokba integrálod amelyek nem függenek közvetlenül a WScript objektumtól.

Alapvető minta: Parancsikonok létrehozása a WScript.Shell segítségével

A folyamat egyszerű: hozd létre a COM-példányt, generáld a parancsikont, töltsd ki a tulajdonságokat, és mentsd el. Ez a minta megismétlődik VBScript, VBA, VB6, VFP és PowerShell nyelvekben. apróbb szintaktikai eltérésekkel.

' 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 A minta ekvivalens, csak a szintaxis és a kód tárolási helye változik. Létrehozhatod a parancsikont az asztalon, hozzárendelhetsz hozzá egy leírást, ikont, gyorsbillentyű és az ablak stílusa:

' 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

Con VisualFoxPro Használhatod a WScript.Shell objektumot is. Az ötlet ugyanaz: keresd meg a Desktop-ot, hozd létre a .lnk fájlt, és állítsd be a tulajdonságokat, például Ablakstílus, IkonHely, Célútvonal vagy a billentyűkombinációt.

* 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

Minden esetben a lényeg ugyanaz: CreateShortcut, TargetPath, SaveInnen igény szerint testreszabhatja az argumentumokat, az ikont, a munkakönyvtárat és az ablakstílust.

  Hogyan lehet egyszerűen streamelni videókat a hálózaton keresztül VLC-vel

Argumentumok, ablakstílus, ikonok és billentyűparancsok

Ha az Accessnek paraméterekkel kell elindítania egy alkalmazást, egyszerűen töltse ki .ArgumentumokA folyamathoz csomagtartó egy adott mappában használja .Munkakönyvtár a helyes útvonallal.

A megjelenéshez definiálja .IconHelyszín egy .ico fájlra vagy egy .exe/.dll fájlban található erőforrásra mutat (az indexet a vessző után adhatja meg). A megnyitási viselkedést a .AblakStílus3 maximalizált, 7 minimalizált, 4 normál.

Ha billentyűkombinációt szeretne, használja .Gyorsbillentyű az ALT+CTRL+Betű mintával (például ALT+CTRL+N). Ez a hozzárendelés felgyorsítja a megnyitást, de Nem ajánlott túl sokat kiosztani hogy ne zavarja a rendszer gyorsbillentyűit.

URL (.url) gyorsbillentyűk

Az alkalmazás .lnks fájljai mellett a WSH létrehozhat .url parancsikonokat is, amelyek megnyitják az alapértelmezett böngészőt. A TargetPath a webcímre mutat és ha saját ikonra van szükséged, később szerkesztheted az .url fájlt az IconFile és az IconIndex hozzáadásával.

' 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

Ez a megközelítés ideális a linkek SharePoint, intranetes vagy webes alkalmazások amelyet kéznél szeretne tartani a felhasználó asztalán.

PowerShell IT-részlegekhez: Intune, SCCM és nagyméretű telepítések

A PowerShell ugyanahhoz a COM modellhez biztosít hozzáférést, mint a WSH, így hozzáférést hozhat létre és tömegesen terjeszthet. A szokásos dolog a megfelelő asztal felismerése (felhasználói vagy nyilvános), célmappák létrehozása és szükség esetén elérési utak rögzítése a Gyorselérésben.

# 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

A megvalósításokban a következővel: Be van hangolvaEz a minta lehetővé teszi egy mappa létrehozását az asztalon, és a hozzáférés átadását az Edge-nek olyan paraméterekkel, mint egy SharePoint URL. Ha SYSTEM-ként fut, a cél asztal nyilvános lesz, amely minden profil számára látható lesz.

  Ismerje meg, hogyan akadályozhatja meg, hogy mások irányítsák Chromecast készülékét

En SCCMHa egy előre elkészített .lnk fájlt szeretnél telepíteni, a minimális parancs lehet olyan egyszerű, mint a nyilvános asztalra másolása: Másolási elem \\kiszolgáló\\útvonal\\hozzáférés.lnk C:\\Felhasználók\\Nyilvános\\AsztalHa nem jelenik meg, ellenőrizze a következő pontokat:

  • Végrehajtási kontextusGyőződjön meg arról, hogy a program megfelelő jogosultságokkal és a várt felhasználón/rendszeren fut.
  • Hozzáférés a megosztott erőforráshozA futó fióknak képesnek kell lennie az UNC elérési út olvasására.
  • Szóközökkel ellátott útvonalak: A -Path és a -Destination paramétereket idézőjelek közé kell tenni.
  • BitnessVegyes 32/64 bites környezetekben megerősíti, hogy nincsenek nem kívánt átirányítások.

Rögzítés a gyors eléréshez a Shell.Application segítségével

Az asztalon kívül mappákat is rögzíthet a Gyors hozzáférés a Shell.Application COM objektummal. Ez akkor hasznos, ha létrehoz egy kötési útvonalat, és azt szeretné, hogy az elérhető legyen az Explorerben.

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

Ha csapatokat irányítasz, és azt szeretnéd, hogy a felhasználók gyorsan megtalálják a hozzájuk tartozó parancsikonokat, Ez az apró tett is számít nap mint nap.

MSIX és PSF: Hozzáférés létrehozása verziózott elérési utak nélkül

Amikor alkalmazásokat csomagolsz a következővel: MSIX, a telepítési útvonal tartalmazza a verziót (például C:\\Program Files\\WindowsApps\\MyApp_1.0.0.0_x86__…). Ez minden frissítéssel változik, ezért nem ajánlott egy .lnk fájlt ezzel az útvonallal beállítani. Megoldás: AppExecutionAliasHa aliast definiál a jegyzékfájlban, elindíthatja az alkalmazást a %localappdata%\\Microsoft\\WindowsApps\\myapp.exe paranccsal anélkül, hogy a verzióhoz lenne kötve.

Ehhez adja hozzá a névtereket a manifestben (uap3 és desktop), és hozza létre a bővítményt. windows.appExecutionAlias a csomag futtatható fájljára mutat. Ne felejtsd el belefoglalni a neveket az IgnorableNamespaces változókba, hogy a manifest felismerje őket.

Ezt követően módosíthatja az alkalmazás belépési pontját a következőre: PSFLauncher32.exe/PSFLauncher64.exe (az architektúrától függően), és delegálja a hozzáférés létrehozását egy, a config.json fájlban PSF használatával definiált indító szkriptre. A szkript egyszer fut le az első inicializáláskor.

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

PowerShell createshortcut.ps1 Átmásolhatsz egy kész .lnk fájlt a csomagból a felhasználó asztalára, és egy ikont is hozhatsz a munkaterületre. Helyi gyorsítótár\\Roaming ami a verziók között stabil marad.

# 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

Ezzel a megközelítéssel biztosíthatja, hogy a hozzáférés frissítés után is működjön, anélkül, hogy az egyes verziókban megérintenénk a .lnk fájltHa az elérési út az aliasra mutat (például %localappdata%\\Microsoft\\WindowsApps\\myapp.exe), az elérési út továbbra is érvényes lesz.

Hibakezelés és ajánlott validációk

Az .lnk létrehozása előtt célszerű ellenőrizni, hogy a A TargetPath létezik (kivéve, ha olyan változókat használsz, mint a %windir% vagy aliasok). A VBA/VB6-ban riasztást küldhetsz, ha hiányzik a végrehajtható fájl, vagy megszakíthatod a műveletet; a PowerShellben a Test-Path paranccsal ellenőrizheted, hogy az elérési út elérhető-e.

  A FaceTime használata Windows PC-n

Ha az ikon elérési útja egy .ico hálózat, egy hasznos taktika, ha átmásoljuk a felhasználó ideiglenes vagy APPDATA mappájába, és onnan hivatkozunk rá. Így kerülheted el a törött ikonokat ha a hálózati erőforrás nem elérhető.

.url parancsikonok szerkesztésekor, ha saját ikonra van szüksége, nyissa meg újra a fájlt szövegként, és adja hozzá a következőt: IconFile és IconIndex a végén. Ez teljes kontrollt biztosít a megjelenése felett anélkül, hogy böngészőre kellene hagyatkoznod.

Amikor leállítja a COM-ot, szabadítson fel objektumokat a következővel: ReleaseComObject PowerShellben, vagy VB/VBA-ban semmi értéket rendel hozzá. Ez egy apró részlet, de segít elkerülni az erőforrások leállását intenzív kivégzésekben.

Tipikus meghibásodási esetek és azok megoldása

Ha az SCCM általi telepítés 0 kóddal végződik, de a hozzáférés nem jelenik meg, először ellenőrizze a az asztali számítógép célfelhasználójaHa SYSTEM felhasználóként futtattad a gépet és beírtad az interaktív profilba a %USERPROFILE%\Desktop parancsot, akkor semmit sem fogsz látni. Használd a C:\Users\Public\Desktop mappát, hogy mindenki számára látható legyen.

Az Intune-ban, amikor argumentumokkal rendelkező Edge-kérdéseket generál (például egy kódolt szóközöket tartalmazó URL-címet), ellenőrizze, hogy az idézőjelek rendben vannak a -ShortcutArguments kapcsolóban, és a szöveg sértetlenül megérkezik. Egyetlen hely nem stimmel megtörheti a .lnk sorsát.

Vállalati parancsikonmappák (pl. „SharePoint-parancsikonok”) esetén először hozza létre a mappát a megfelelő asztalon, és ha ki szeretné jelölni az Intézőben, horgony a gyors hozzáféréshez ahogy azt a Shell.Application esetében láttuk.

Ha a már felépített .lnk fájlt egy frissítendő MSIX csomagban terjeszted, ne irányítsd a WindowsApps verziózott elérési útjára. AppExecutionAlias ​​használata és másolja ki az ikont a verziózott mappából.

Hasznos trükkök változókkal és elérési utakkal

Hordozható szkriptek írásához támaszkodjon a következőkre: Környezeti változók: %windir%, %systemroot%, %ProgramFiles% és hasonlók. WSH-ban ezeket a következővel lehet kibontani: Környezeti karakterláncok kibontása, és a PowerShellben a $env:VARIABLE paraméterrel hivatkozhatsz rájuk.

Dinamikus útvonalak építésekor ellenőrizze, hogy a a munkamappa \-re végződik hogy elkerülje a rudak duplikálódását vagy a TargetPath megszakítását összefűzéskor. Ez egy kis korlát, amely kerüld a finom hibákat termelésben.

Az összetett paramétereket igénylő parancsfájlok esetén érdemes lehet egy rövid .cmd vagy .ps1 kiterjesztésű parancsfájlt írni, és a parancsikont erre a parancsra irányítani. Így egyszerűsítheted a .lnk fájlt és jobban kézben tarthatod az idézeteket és az argumentumok sorrendjét.

Ha gyorsbillentyűkre van szükséged, próbáld meg lefoglalni a kombinációkat a következővel: jelentős betűk és kerülje az ütközéseket a gyakori billentyűparancsokkal. Sok alkalmazást tartalmazó környezetekben dokumentálja a billentyűparancsokat, hogy a felhasználó könnyen próbálgatás és hiba nélkül kihasználni.

Számos lehetőség közül választhat, hogy megbízható és rugalmas módon hozzon létre parancsikonokat a Windows rendszerben. A WSH a közös bázis, és ezen felül kiválaszthatja a réteget is: klasszikus szkriptek, modern PowerShell, vagy MSIX csomagolás PSF-fel, ha nagy léptékben megismételhető folyamatokat keres. A kulcs a megfelelő elérési út kiválasztása, a végrehajtási kontextus validálása és a törékeny, verziózott elérési utakhoz való ragaszkodás elkerülése.