Crea collegamenti personalizzati con Windows Script Host

Ultimo aggiornamento: 29/09/2025
Autore: Isaac
  • WSH consente di creare collegamenti .lnk e .url da VBScript, VBA, VB6, VFP e PowerShell con l'oggetto WScript.Shell.
  • Nelle distribuzioni IT, il contesto (utente vs SISTEMA) decide se utilizzare il desktop pubblico o quello dell'utente.
  • Con MSIX/PSF, AppExecutionAlias ​​evita percorsi con versione e facilita l'accesso persistente.
  • Le icone, gli argomenti, i tasti di scelta rapida e gli stili delle finestre sono controllati dalle proprietà dei collegamenti.

Scorciatoie in Windows con WSH

Creare scorciatoie non è solo una comodità: è un modo per automatizzare le attività e migliorare la produttività quotidiana. Windows. Windows Copione Ospite (WSH) Offre un modo semplice ed efficace per generare collegamenti ad applicazioni, documenti e indirizzi web da più linguaggi di scripting.

In questa guida pratica riuniamo tecniche comprovate con VBScript, PowerShell, Visual Basic, Visual FoxPro e scenari moderni con pacchetti MSIX e PSFL'obiettivo è consentirti di scegliere l'approccio più adatto al tuo ambiente (utente finale, IT, Intune/SCCM o pacchetto) e di implementarlo con sicurezza.

Che cos'è Windows Script Host e perché potrebbe interessarti

Windows Script Host è l'infrastruttura che consente di eseguire VBScript e JScript in modo nativo su Windows, oltre a esporre un modello di oggetti COM per automatizzare le attività di sistema. L'oggetto WScript.Shell È l'elemento chiave per creare collegamenti sul desktop, collegamenti al menu Start o cartelle speciali.

WSH fa parte di Windows da versioni come Windows 98 e 2000e può essere aggiunto alle edizioni precedenti, come Windows NT 4.0, utilizzando componenti opzionali. Nei sistemi moderni è integrato e in pratica è sufficiente avere gli eseguibili wscript.exe e cscript.exe per avviare gli script.

Esempi di script per scorciatoie

Requisiti e best practice prima di iniziare

Prima di iniziare, è opportuno rivedere alcuni punti fondamentali. Verificare che WSH sia disponibile e non ci sono policy che bloccano l'esecuzione degli script. Negli ambienti aziendali, gli oggetti Criteri di gruppo e le impostazioni antivirus possono influire su VBScript o PowerShell.

Evita di riempire il desktop di scorciatoie. Crea accessi solo quando aggiungono valore e se li distribuisci centralmente, definisci un criterio chiaro (ad esempio, cartelle di lavoro o applicazioni aziendale critica).

Se lo script viene eseguito come SISTEMA o nel contesto della macchina (Intune/SCCM), pensa attentamente a dove scrivi il file .lnk: potresti voler usare il desktop pubblico (C:\\Users\\Public\\Desktop) invece del desktop dell'utente corrente.

Controlla il percorso di destinazione, permessi e variabili di ambienteUn errore tipico è quello di puntare a percorsi con versioni variabili (Programmi\\WindowsApps) o di utilizzare UNC senza accesso dall'account che esegue lo script.

Cartelle speciali e come risolvere i loro percorsi

WSH risolve i nomi delle cartelle speciali nel loro percorso effettivo utilizzando WshShell.CartelleSpecialiTra le più utili ci sono Desktop, StartMenu, Programmi, Esecuzione automatica o Preferiti, nonché le loro varianti per tutti gli utenti (AllUsersDesktop, AllUsersStartMenu, ecc.). Questo ti permette di essere indipendente della lingua e della struttura esatta del profilo.

Se stai lavorando con Visual Basic classico o vuoi ottenere percorsi dall'API, puoi usare SHGetSpecialFolderLocation/SHGetPathFromIDList per elencare percorsi quali Desktop, Programmi recenti o Documenti. È utile quando si integra nelle applicazioni che non dipendono direttamente dall'oggetto WScript.

Modello di base: creazione di scorciatoie con WScript.Shell

Il flusso è semplice: creare l'istanza COM, generare il collegamento, compilare le proprietà e salvare. Questo schema si ripete in VBScript, VBA, VB6, VFP e PowerShell con piccole variazioni sintattiche.

' 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 Il modello è equivalente, cambiano solo la sintassi e la posizione in cui si ospita il codice. È possibile creare il collegamento sul desktop, assegnare una descrizione, un'icona, tasto di scelta rapida e stile della finestra:

' 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 Visual FoxPro Puoi anche usare l'oggetto WScript.Shell. L'idea è identica: individua Desktop, crea il file .lnk e imposta proprietà come WindowStyle, IconLocation, TargetPath o la combinazione di tasti.

* 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

In tutti i casi il nucleo è lo stesso: Crea collegamento, percorso di destinazione, salvaDa lì, personalizza gli argomenti, l'icona, la directory di lavoro e lo stile della finestra in base alle tue esigenze.

  Come trasmettere video in streaming sulla rete con VLC facilmente

Argomenti, stile della finestra, icone e scorciatoie

Quando l'accesso deve avviare un'app con parametri, è sufficiente compilare .ArgomentiPer il processo Boot in una cartella specifica, utilizzare .DirectoryDiLavoro con la strada giusta.

Per l'aspetto, definisci .IconLocation puntando a un file .ico o a una risorsa in un file .exe/.dll (è possibile specificare l'indice dopo la virgola). Il comportamento di apertura è controllato con .Stile finestra: 3 massimizzati, 7 minimizzati, 4 normali.

Se vuoi una combinazione di tasti, usa .Tasto di scelta rapida con il modello ALT+CTRL+Lettera (ad esempio, ALT+CTRL+N). Questa assegnazione velocizza l'apertura, ma Non è consigliabile assegnarne troppi per non interferire con le scorciatoie di sistema.

Scorciatoie URL (.url)

Oltre ai file .lnk dell'applicazione, WSH può creare collegamenti .url che aprono il browser predefinito. TargetPath punta all'indirizzo web e se hai bisogno di un'icona personalizzata, puoi modificare il file .url in un secondo momento per aggiungere IconFile e 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

Questo approccio è ideale per link a SharePoint, applicazioni intranet o web che vuoi lasciare a portata di mano sul desktop dell'utente.

PowerShell per IT: Intune, SCCM e distribuzioni su larga scala

PowerShell incorpora l'accesso allo stesso modello COM di WSH, quindi è possibile creare l'accesso e distribuirlo in massa. La cosa normale è rilevare il desktop corretto (utente o pubblico), generare cartelle di destinazione e, se necessario, aggiungere percorsi in Accesso rapido.

# 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

Nelle implementazioni con In sintoniaQuesto modello consente di creare una cartella sul desktop e di passare l'accesso a Edge con parametri quali un URL di SharePoint. Se eseguito come SISTEMA, il desktop di destinazione sarà quello pubblico, visibile a tutti i profili.

  Scopri come impedire ad altri di controllare il tuo dispositivo Chromecast

En SCCMSe preferisci distribuire un file .lnk predefinito, il comando minimo può essere semplicemente copiarlo sul desktop pubblico: Copia-Elemento \\server\\percorso\\accesso.lnk C:\\Utenti\\Pubblico\\DesktopSe non appare, controlla questi punti:

  • Contesto di esecuzione: Assicurarsi che il programma venga eseguito con autorizzazioni sufficienti e sull'utente/sistema previsto.
  • Accesso alla risorsa condivisa: L'account in esecuzione deve essere in grado di leggere il percorso UNC.
  • Percorsi con spazi: Racchiudere -Percorso e -Destinazione tra virgolette.
  • bitness: In ambienti misti a 32/64 bit, conferma che non ci sono reindirizzamenti indesiderati.

Aggiungi all'accesso rapido con Shell.Application

Oltre al desktop, puoi aggiungere cartelle a Accesso veloce con l'oggetto COM Shell.Application. Questo è utile quando si crea un percorso di binding e si desidera renderlo accessibile in Explorer.

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

Se gestisci team e desideri che gli utenti trovino rapidamente i loro collegamenti, Questa piccola azione fa la differenza nella loro giornata.

MSIX e PSF: creare l'accesso senza basarsi su percorsi con versione

Quando si confezionano applicazioni con MSIX, il percorso di installazione include la versione (ad esempio, C:\\Programmi\\WindowsApps\\MyApp_1.0.0.0_x86__…). Cambia a ogni aggiornamento, quindi è una cattiva idea impostare un .lnk con quel percorso. Soluzione: AppExecutionAliasDefinendo un alias nel manifesto, è possibile avviare l'app con %localappdata%\\Microsoft\\WindowsApps\\myapp.exe senza essere vincolati alla versione.

Per fare ciò, aggiungi gli spazi dei nomi nel manifesto (uap3 e desktop) e crea l'estensione windows.appExecutionAlias che punta all'eseguibile del pacchetto. Ricordati di includere i nomi in IgnorableNamespaces in modo che il manifest li riconosca.

Successivamente, è possibile modificare il punto di ingresso dell'applicazione in PSFLauncher32.exe/PSFLauncher64.exe (a seconda dell'architettura) e delegare la creazione dell'accesso a uno script di avvio definito in config.json utilizzando PSF. Lo script viene eseguito una volta alla prima inizializzazione.

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

PowerShell creascorciatoia.ps1 È possibile copiare un file .lnk già pronto dal pacchetto sul desktop dell'utente e anche aggiungere un'icona all'area di lavoro. LocalCache\\Roaming che rimane stabile tra le versioni.

# 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

Con questo approccio si garantisce che l'accesso funzioni dopo un aggiornamento, senza toccare il .lnk in ogni versioneSe il percorso punta all'alias (ad esempio, %localappdata%\\Microsoft\\WindowsApps\\myapp.exe), il percorso sarà comunque valido.

Gestione degli errori e convalide consigliate

Prima di generare il .lnk è consigliabile convalidare che il TargetPath esiste (a meno che non si utilizzino variabili come %windir% o alias). In VBA/VB6, è possibile ricevere un avviso se l'eseguibile è mancante o annullare l'operazione; in PowerShell, utilizzare Test-Path per verificare se il percorso è accessibile.

  Come usare FaceTime sul tuo PC Windows

Se il percorso dell'icona è un rete .ico, una tattica utile è quella di copiarlo nella cartella temporanea o APPDATA dell'utente e di farvi riferimento da lì. Ecco come evitare le icone rotte se la risorsa di rete non è disponibile.

Quando modifichi i collegamenti .url, se hai bisogno di una tua icona, riapri il file come testo e aggiungi IconFile e IconIndex alla fine. Questo ti dà il controllo completo sul suo aspetto senza dover ricorrere a un browser.

Quando si termina COM, liberare gli oggetti con ReleaseComObject in PowerShell, oppure non assegnare nulla in VB/VBA. È un dettaglio minore, ma aiuta a evitare di bloccare le risorse in esecuzioni intensive.

Casi tipici di guasto e come risolverli

Se una distribuzione tramite SCCM termina con il codice 0 ma l'accesso non viene visualizzato, controllare prima utente target del desktopSe stavi eseguendo il sistema come SYSTEM e digitavi %USERPROFILE%\Desktop nel profilo interattivo, non vedrai nulla. Usa C:\Users\Public\Desktop per renderlo visibile a tutti.

In Intune, quando si generano prompt Edge con argomenti (ad esempio, un URL con spazi codificati), verificare che le virgolette vanno bene in -ShortcutArguments e il testo arriva intatto. Un singolo spazio fuori posto può spezzare il destino del file .lnk.

Per le cartelle di collegamento aziendali (ad esempio, "Collegamenti di SharePoint"), creare prima la cartella sul desktop corretto e, se si desidera evidenziarla in Esplora risorse, ancora ad Accesso rapido come abbiamo visto con Shell.Application.

Se si distribuisce il file .lnk già compilato in un pacchetto MSIX in fase di aggiornamento, non indirizzarlo al percorso con versione all'interno di WindowsApps. Utilizzare AppExecutionAlias e copiare l'icona fuori dalla cartella con versione.

Trucchi utili con variabili e percorsi

Per scrivere script portatili, affidati a variabili ambientali: %windir%, %systemroot%, %ProgramFiles% e simili. In WSH puoi espanderli con EspandiAmbienteStringhee in PowerShell è possibile farvi riferimento tramite $env:VARIABLE.

Quando si creano percorsi dinamici, verificare se la cartella di lavoro termina con \ per evitare di duplicare le barre o di interrompere il TargetPath durante la concatenazione. È un piccolo guardrail che evitare errori sottili in produzione.

Per le scorciatoie che richiedono parametri complessi, si consiglia di scrivere un piccolo script .cmd o .ps1 e di fare in modo che la scorciatoia punti ad esso. Ecco come semplificare il file .lnk e hai un maggiore controllo sull'ordine delle citazioni e degli argomenti.

Se hai bisogno di tasti di scelta rapida, prova a riservare le combinazioni con lettere significative ed evitare conflitti con le scorciatoie comuni. In ambienti con molte app, documentare le scorciatoie in modo che l'utente possa approfittare senza tentativi ed errori.

Esistono diverse opzioni per creare collegamenti in Windows in modo affidabile e flessibile. WSH è la base comuneE, soprattutto, puoi scegliere il livello: script classici, PowerShell moderno o packaging MSIX con PSF quando cerchi processi ripetibili su larga scala. La chiave è selezionare il percorso corretto, convalidare il contesto di esecuzione ed evitare di rimanere bloccati in percorsi fragili e con versioni limitate.