- 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.
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.
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.
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.
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.
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.
Pisarz z pasją zajmujący się światem bajtów i technologii w ogóle. Uwielbiam dzielić się swoją wiedzą poprzez pisanie i właśnie to będę robić na tym blogu, pokazywać Ci wszystkie najciekawsze rzeczy o gadżetach, oprogramowaniu, sprzęcie, trendach technologicznych i nie tylko. Moim celem jest pomóc Ci poruszać się po cyfrowym świecie w prosty i zabawny sposób.