Twórz niestandardowe skróty za pomocą hosta skryptów systemu Windows

Ostatnia aktualizacja: 29/09/2025
Autor: Isaac
  • WSH umożliwia tworzenie skrótów .lnk i .url z języków VBScript, VBA, VB6, VFP i PowerShell z obiektem WScript.Shell.
  • W przypadku wdrożeń informatycznych kontekst (użytkownik kontra SYSTEM) decyduje, czy należy korzystać z pulpitu publicznego czy użytkownika.
  • Dzięki MSIX/PSF AppExecutionAlias ​​unika wersjonowanych ścieżek i ułatwia trwały dostęp.
  • Ikony, argumenty, klawisze skrótu i ​​style okien są kontrolowane przez właściwości skrótu.

Skróty w systemie Windows z WSH

Tworzenie skrótów nie jest tylko wygodą: to sposób na automatyzację zadań i poprawę codziennej produktywności. Windows. Windows Scenariusz Gospodarz (WSH) Oferuje prosty i skuteczny sposób generowania linków do aplikacji, dokumentów i adresów internetowych z wielu języków skryptowych.

W tym praktycznym przewodniku zebraliśmy sprawdzone techniki z VBScript, PowerShell, Visual Basic, Visual FoxPro i nowoczesne scenariusze z pakietami MSIX i PSFCelem jest umożliwienie Ci wyboru podejścia najlepiej odpowiadającego Twojemu środowisku (użytkownika końcowego, IT, Intune/SCCM lub pakietowemu) i jego wdrożenia z pewnością siebie.

Czym jest Host skryptów systemu Windows i dlaczego może Cię to zainteresować

Host skryptów systemu Windows to infrastruktura umożliwiająca uruchamianie VBScript i JScript natywnie w systemie Windows, a także udostępnia model obiektów COM w celu automatyzacji zadań systemowych. Obiekt WScript.Shell Jest to kluczowy element umożliwiający tworzenie skrótów na pulpicie, w menu Start lub w specjalnych folderach.

WSH jest częścią systemu Windows od wersji takich jak Windows 98 i 2000i można je dodać do starszych edycji, np. Windows NT 4.0, przy użyciu opcjonalnych komponentów. W nowoczesnych systemach jest on zintegrowany W praktyce do uruchamiania skryptów wystarczy mieć pliki wykonywalne wscript.exe i cscript.exe.

Przykłady skryptów dla skrótów

Wymagania i najlepsze praktyki przed rozpoczęciem

Zanim zaczniesz, warto przypomnieć sobie kilka podstawowych kwestii. Sprawdź, czy WSH jest dostępne i nie ma żadnych zasad blokujących wykonywanie skryptów. W środowiskach korporacyjnych obiekty zasad grupy (GPO) i ustawienia antywirusowe mogą wpływać na VBScript lub PowerShell.

Unikaj zaśmiecania pulpitu skrótami. Twórz dostępy tylko wtedy, gdy dodają wartości a jeśli będziesz je dystrybuować centralnie, określ jasne kryterium (np. foldery robocze lub mobilne i webowe krytyczne korporacyjne).

Jeśli skrypt jest uruchamiany jako SYSTEM lub w kontekście maszyny (Intune/SCCM), zastanów się dokładnie, gdzie zapisujesz plik .lnk: możesz chcieć użyć pulpitu publicznego (C:\\Users\\Public\\Desktop) zamiast pulpitu bieżącego użytkownika.

Sprawdź ścieżka docelowa, uprawnienia i zmienne środowiskoweTypowym błędem jest wskazywanie ścieżek ze zmieniającymi się wersjami (Program Files\\WindowsApps) lub stosowanie UNC bez dostępu z konta uruchamiającego skrypt.

Foldery specjalne i jak rozwiązywać ich ścieżki

WSH rozwiązuje specjalne nazwy folderów na ich rzeczywistą ścieżkę za pomocą WshShell.SpecialFoldersDo najprzydatniejszych należą: Pulpit, Menu Start, Programy, Uruchamianie czy Ulubione, a także ich warianty dla wszystkich użytkowników (AllUsersDesktop, AllUsersStartMenu itd.). Dzięki temu możesz być niezależny języka i dokładnej struktury profilu.

Jeśli pracujesz z klasycznym Visual Basic lub chcesz uzyskać trasy z API, możesz użyć SHGetSpecialFolderLocation/SHGetPathFromIDList aby wyświetlić ścieżki takie jak Pulpit, Ostatnio używane programy lub Dokumenty. Przydatne przy integracji z aplikacjami które nie zależą bezpośrednio od obiektu WScript.

Podstawowy wzorzec: Tworzenie skrótów za pomocą WScript.Shell

Działanie jest proste: utwórz instancję COM, wygeneruj skrót, wypełnij właściwości i zapisz. Ten wzór powtarza się w językach VBScript, VBA, VB6, VFP i PowerShell z drobnymi zmianami składniowymi.

' 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 Wzorzec jest równoważny, zmienia się tylko składnia i miejsce przechowywania kodu. Możesz utworzyć skrót na pulpicie, przypisać opis, ikonę, klawisz skrótu i styl okna:

' 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

z Visual Fox Pro Możesz również użyć obiektu WScript.Shell. Idea jest identyczna: zlokalizuj Desktop, utwórz plik .lnk i ustaw właściwości, takie jak Styl okna, lokalizacja ikony, ścieżka docelowa lub kombinację klawiszy.

* 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

W każdym przypadku rdzeń jest taki sam: Utwórz skrót, ścieżka docelowa, zapiszNastępnie dostosuj argumenty, ikonę, katalog roboczy i styl okna według potrzeb.

  Jak łatwo przesyłać strumieniowo filmy przez sieć za pomocą programu VLC

Argumenty, styl okna, ikony i skróty

Gdy dostęp musi uruchomić aplikację z parametrami, wystarczy wypełnić .Argumenty. Do procesu boot w określonym folderze użyj .Katalog roboczy właściwą trasą.

Jeśli chodzi o wygląd, zdefiniuj .IkonaLokalizacji wskazując na plik .ico lub zasób w pliku .exe/.dll (indeks można określić po przecinku). Zachowanie otwierania jest kontrolowane za pomocą .StylOkna: 3 zmaksymalizowane, 7 zminimalizowane, 4 normalne.

Jeśli chcesz użyć kombinacji klawiszy, użyj .Skrót klawiszowy ze wzorcem ALT+CTRL+Litera (na przykład ALT+CTRL+N). To przypisanie przyspiesza otwieranie, ale Nie zaleca się przypisywania zbyt wielu aby nie kolidować ze skrótami systemowymi.

Skróty URL (.url)

Oprócz plików aplikacji .lnks, WSH może tworzyć skróty .url otwierające domyślną przeglądarkę. TargetPath wskazuje na adres internetowy a jeśli potrzebujesz własnej ikony, możesz później edytować plik .url i dodać IconFile i 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

To podejście jest idealne dla linki do SharePoint, intranetu lub aplikacji internetowych które chcesz pozostawić pod ręką na pulpicie użytkownika.

PowerShell dla IT: Intune, SCCM i wdrożenia na dużą skalę

PowerShell zapewnia dostęp do tego samego modelu COM co WSH, dzięki czemu można tworzyć dostępy i rozpowszechniać je masowo. Zwykle wykrywa się właściwy pulpit (użytkownika lub publicznego), generuj foldery docelowe i, jeśli to konieczne, przypinaj ścieżki w Szybkim dostępie.

# 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

W implementacjach z NastrojonyTen wzorzec umożliwia utworzenie folderu na pulpicie i udostępnienie dostępu do przeglądarki Edge przy użyciu parametrów, takich jak adres URL usługi SharePoint. Jeśli uruchomiono jako SYSTEM, pulpit docelowy będzie pulpitem publicznym, widocznym dla wszystkich profili.

  Dowiedz się, jak uniemożliwić innym kontrolowanie Twojego Chromecasta

En SCCMJeśli wolisz wdrożyć gotowy plik .lnk, minimalne polecenie może być tak proste, jak skopiowanie go na pulpit publiczny: Kopiuj-element \\serwer\\ścieżka\\dostęp.lnk C:\\Użytkownicy\\Publiczny\\PulpitJeśli się nie pojawi, sprawdź następujące punkty:

  • Kontekst wykonania:Upewnij się, że program działa z odpowiednimi uprawnieniami i na oczekiwanym użytkowniku/systemie.
  • Dostęp do współdzielonego zasobu:Konto uruchomione musi mieć możliwość odczytu ścieżki UNC.
  • Trasy z odstępami: Umieść -Path i -Destination w cudzysłowie.
  • Zgryźliwość:W mieszanych środowiskach 32/64-bitowych potwierdza brak niepożądanych przekierowań.

Przypnij do szybkiego dostępu za pomocą Shell.Application

Oprócz pulpitu możesz przypinać foldery do Szybki dostęp z obiektem COM Shell.Application. Jest to przydatne, gdy tworzysz ścieżkę powiązania i chcesz, aby była dostępna w Eksploratorze.

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

Jeśli zarządzasz zespołami i chcesz, aby użytkownicy mogli szybko znaleźć swoje skróty, Ta mała czynność robi różnicę na co dzień.

MSIX i PSF: Twórz dostęp bez polegania na ścieżkach wersjonowanych

Kiedy pakujesz aplikacje z MSIXŚcieżka instalacji zawiera wersję (na przykład C:\\Program Files\\WindowsApps\\MyApp_1.0.0.0_x86__…). Zmienia się ona z każdą aktualizacją, więc ustawianie pliku .lnk z tą ścieżką to zły pomysł. Rozwiązanie: AppExecutionAliasDefiniując alias w manifeście, możesz uruchomić aplikację za pomocą %localappdata%\\Microsoft\\WindowsApps\\myapp.exe, nie będąc przywiązanym do wersji.

Aby to zrobić, dodaj przestrzenie nazw w manifeście (uap3 i desktop) i utwórz rozszerzenie windows.appExecutionAlias wskazując na plik wykonywalny pakietu. Pamiętaj o uwzględnieniu nazw w IgnorableNamespaces, aby manifest je rozpoznał.

Następnie możesz zmienić punkt wejścia aplikacji na PSFLauncher32.exe/PSFLauncher64.exe (w zależności od architektury) i delegować tworzenie dostępu do skryptu startowego zdefiniowanego w config.json za pomocą PSF. Skrypt uruchamia się raz przy pierwszej inicjalizacji.

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

PowerShell tworzy skrót.ps1 Możesz skopiować gotowy plik .lnk z pakietu na pulpit użytkownika, a także umieścić ikonę w obszarze roboczym. Pamięć podręczna lokalna\\Roaming który pozostaje stabilny pomiędzy wersjami.

# 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

Dzięki temu podejściu masz pewność, że dostęp będzie działał po aktualizacji, bez dotykania .lnk w każdej wersjiJeśli ścieżka wskazuje na alias (na przykład %localappdata%\\Microsoft\\WindowsApps\\myapp.exe), ścieżka nadal będzie prawidłowa.

Obsługa błędów i zalecane walidacje

Przed wygenerowaniem pliku .lnk zaleca się sprawdzenie, czy Ścieżka docelowa istnieje (chyba że używasz zmiennych takich jak %windir% lub aliasów). W VBA/VB6 możesz wyświetlić alert, jeśli brakuje pliku wykonywalnego lub anulować operację; w PowerShell użyj polecenia Test-Path, aby sprawdzić, czy ścieżka jest dostępna.

  Jak korzystać z FaceTime na komputerze z systemem Windows

Jeśli ścieżka ikony jest Sieć .icoPrzydatną taktyką jest skopiowanie go do folderu tymczasowego lub APPDATA użytkownika i odwoływanie się do niego z tego miejsca. Oto jak uniknąć zepsutych ikon jeśli zasób sieciowy nie jest dostępny.

Jeśli podczas edycji skrótów .url potrzebujesz własnej ikony, otwórz plik ponownie jako tekst i dodaj IconFile i IconIndex na końcu. Dzięki temu masz pełną kontrolę nad wyglądem strony, bez konieczności korzystania z przeglądarki.

Po zakończeniu COM obiekty z ReleaseComObject w PowerShell lub nie przypisz niczego w VB/VBA. To drobny szczegół, ale pomaga uniknąć zawieszania zasobów w intensywnych egzekucjach.

Typowe przypadki awarii i sposoby ich rozwiązania

Jeżeli wdrożenie za pomocą SCCM kończy się kodem 0, ale dostęp nie jest widoczny, najpierw sprawdź użytkownik docelowy pulpituJeśli uruchomiłeś jako SYSTEM i wpisałeś %USERPROFILE%\Desktop w profilu interaktywnym, nic nie zobaczysz. Użyj C:\Users\Public\Desktop, aby udostępnić go wszystkim.

W usłudze Intune podczas generowania monitów Edge z argumentami (na przykład adresem URL ze spacjami zakodowanymi w kodzie) należy potwierdzić, że cudzysłowy są w porządku w -ShortcutArguments i tekst zostanie dostarczony w nienaruszonym stanie. Pojedyncza przestrzeń nie na swoim miejscu może zmienić los .lnk.

W przypadku folderów skrótów firmowych (np. „Skróty programu SharePoint”) najpierw utwórz folder na właściwym pulpicie, a jeśli chcesz go zaznaczyć w Eksploratorze, kotwica do szybkiego dostępu jak widzieliśmy na przykładzie Shell.Application.

Jeśli dystrybuujesz już skompilowany plik .lnk w pakiecie MSIX, który jest aktualizowany, nie kieruj go do ścieżki wersji w ramach WindowsApps. Użyj AppExecutionAlias i skopiuj ikonę z folderu wersji.

Przydatne sztuczki ze zmiennymi i ścieżkami

Aby pisać przenośne skrypty, polegaj na Zmienne środowiska: %windir%, %systemroot%, %ProgramFiles% i podobne. W WSH możesz je rozszerzyć za pomocą Rozwiń ciągi środowiskowe, a w programie PowerShell można odwoływać się do nich za pomocą $env:VARIABLE.

Podczas tworzenia tras dynamicznych sprawdź, czy folder roboczy kończy się na \ aby uniknąć duplikowania słupków lub uszkodzenia ścieżki docelowej podczas łączenia. To mała bariera ochronna, unikaj subtelnych błędów w produkcji.

W przypadku skrótów wymagających złożonych parametrów, rozważ napisanie małego skryptu .cmd lub .ps1 i ustawienie skrótu wskazującego na niego. Oto jak uprościć plik .lnk i masz lepszą kontrolę nad cytowaniem i kolejnością argumentów.

Jeśli potrzebujesz skrótów klawiszowych, spróbuj zarezerwować kombinacje z znaczące litery i unikaj kolizji z popularnymi skrótami. W środowiskach z wieloma aplikacjami dokumentuj skróty, aby użytkownik mógł skorzystaj bez prób i błędów.

Dostępnych jest wiele opcji tworzenia skrótów w systemie Windows, które można dostosować do własnych potrzeb i wymagań. WSH jest wspólną bazą, a co więcej, możesz wybrać warstwę: klasyczne skrypty, nowoczesny PowerShell lub pakiety MSIX z PSF, jeśli szukasz powtarzalnych procesów na dużą skalę. Kluczem jest wybór odpowiedniej ścieżki, sprawdzenie kontekstu wykonania i uniknięcie uwięzienia w kruchych, wersjonowanych ścieżkach.