Crear accesos directos con Windows Script Host: guía total

Última actualización: octubre 2, 2025
  • WSH, PowerShell y MSIX/PSF cubren todos los escenarios modernos para crear accesos.
  • Diferencias clave entre .lnk y .url: propiedades, iconos y rutas especiales.
  • AppExecutionAlias evita roturas al actualizar paquetes MSIX con cambios de versión.
  • Buenas prácticas: contexto correcto (Sistema/usuario), iconos y no saturar el Escritorio.

crear accesos directos con Windows Script Host

Si trabajas en Windows, tarde o temprano te tocará crear accesos directos de forma automática, ya sea para desplegar aplicaciones, scripts o enlaces web. La buena noticia: Windows Script Host (WSH), VBScript, Visual Basic, PowerShell y hasta MSIX con PSF te dan varias vías para lograrlo según tu entorno.

En esta guía sintetizo en un único recurso todo lo que necesitas: desde lo más clásico (WSH y VB) hasta lo más moderno (PowerShell, Intune y MSIX/PSF), incluyendo trucos prácticos, diferencias entre .lnk y .url, carpetas especiales, iconos, hotkeys y matices que sólo descubres cuando te peleas con esto en producción.

Qué es Windows Script Host y por qué sigue siendo clave

Windows Script Host es el motor que permite ejecutar VBScript y JScript de forma nativa en Windows. Se integró en Windows 98/2000 y posteriores; en Windows NT 4.0 se instalaba con el Option Pack. Además de ejecutar scripts, expone un modelo COM (por ejemplo, WScript.Shell) con métodos para automatizar tareas del sistema.

Con WSH puedes invocar procesos, manipular el Registro, acceder a carpetas especiales, mostrar popups y, lo que nos ocupa aquí, crear accesos directos a aplicaciones (.lnk) o a URLs (.url). En paralelo, están disponibles otros objetos como WScript.Network para impresoras o unidades de red.

Accesos directos de Windows: .lnk vs .url

Hay dos tipos de accesos directos típicos. Los .lnk apuntan a un ejecutable o archivo y permiten configurar TargetPath, Arguments, WorkingDirectory, IconLocation, WindowStyle y Hotkey. Los .url son archivos tipo INI que contienen una URL y se abren con el navegador predeterminado.

Con WSH puedes crear ambos a través de WScript.Shell.CreateShortcut. Para .lnk es directo (propiedades en el objeto IWshShortcut). Para .url, tras guardar, a veces conviene editar el archivo e inyectar IconFile e IconIndex si quieres icono personalizado, ya que no siempre queda fijado con el Save() del acceso directo.

Ten presente los estilos de ventana: en los ejemplos clásicos se usa 3 para maximizada, 7 para minimizada y 1/4 para ventana normal (puede variar según el lenguaje; en VBScript es habitual 1=normal, 3=maximizada, 7=minimizada).

Carpetas especiales y rutas: dónde colocar los accesos

Usando WSH puedes resolver rutas de carpetas especiales mediante WshShell.SpecialFolders y aprovechar las listas de accesos directos en Windows 10 para decidir dónde colocarlos según el usuario o el equipo.

Listado útil (según las ayudas clásicas del script de ejemplo): AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, AllUsersStartUp, Desktop, Favorites, Fonts, MyDocuments, NetHood, PrintHood, Programs, Recent, SendTo, StartMenu, StartUp, Templates.

Si vienes de VB6 o VBA, también puedes obtener rutas especiales con la API SHGetSpecialFolderLocation/SHGetPathFromIDList y las constantes CSIDL (ej.: CSIDL_DESKTOP, CSIDL_PROGRAMS, CSIDL_STARTMENU…). Es útil cuando quieres poblar combos con rutas como “Escritorio”, “Programas”, “Favoritos”, etc.

  No se ha encontrado el objeto especificado (0x80042308) Error de restauración del sistema

Ejemplos rápidos con WSH: del escritorio a los parámetros

Con Visual FoxPro o VBScript, crear un acceso directo al Bloc de notas en el Escritorio es tan simple como utilizar CreateObject(«WScript.Shell») y CreateShortcut, asignar propiedades y guardar.

Además, puedes configurar cosas como WindowStyle, IconLocation, Hotkey y TargetPath. Por ejemplo, abrir Notepad maximizado, con icono propio y una combinación de teclas ALT+CTRL+F.

Si tu acceso directo necesita argumentos, puedes asignarlos en la propiedad Arguments e incluso establecer la carpeta de trabajo (WorkingDirectory) cuando apuntas a un ejecutable como MSACCESS.EXE o tu propio .exe.

Para atajos web (.url), bastará con indicar la URL como TargetPath y guardar; si deseas icono personalizado, ajusta IconFile e IconIndex en el archivo .url tras crearlo.

Crear accesos directos desde VB/VBA/Visual Basic clásico

Si usas VB6 o VBA, lo más cómodo es late binding con CreateObject(«WScript.Shell»). A partir de ahí, CreateShortcut devuelve un objeto en el que estableces TargetPath, Arguments, WorkingDirectory, IconLocation, Description y Hotkey (p. ej., «ALT+CTRL+N»).

Un patrón típico consiste en construir el destino con App.Path y App.EXEName (en VB6), definir el nombre del .lnk y guardarlo en la ruta de Escritorio obtenida con SpecialFolders(«Desktop»). Si optas por una GUI, puedes listar rutas especiales en un ComboBox y dejar que el usuario elija dónde generarlo.

Pequeño consejo práctico: muchos scripts eliminan el .lnk existente antes de recrearlo, por si has cambiado icono, descripción, hotkey o estilo. Así te aseguras de que el acceso queda actualizado en cada despliegue.

El gran VBScript parametrizable: crear-accesodirecto.vbs

Existe un script VBScript muy completo que permite crear atajos mediante parámetros de línea de comandos, contemplando tanto .lnk como .url, sobrescritura forzada, argumentos, iconos e índice de icono.

Parámetros destacados: /Nombre (obligatorio), /Carpeta (una de las especiales, por defecto Desktop), /URL o /Aplicacion (uno de los dos es obligatorio), /Icono y /IndiceIcono, /RutaTrabajo, /Argumentos y /Forzar para sobrescribir si ya existe.

Para .url, el script guarda el acceso y luego reabre el archivo como texto para inyectar IconFile e IconIndex cuando procede (por ejemplo, si el icono es un .ico remoto o quieres uno concreto de shell32.dll). Para .lnk, basta con usar la propiedad IconLocation en el IWshShortcut.

Este enfoque es ideal para GPOs o scripts de inicio de sesión, porque permite generar accesos en AllUsersDesktop (visible para todos los usuarios) o en carpetas por-usuario como «Desktop» o «StartUp».

PowerShell: el método moderno (y compatible con Intune)

PowerShell no trae nativo un cmdlet para .lnk, pero puedes tirar del COM de WScript.Shell sin problemas. Es la vía estándar en despliegues con Intune o scripts locales para crear accesos en Windows 11.

El patrón mínimo: crear el objeto COM, invocar CreateShortcut, asignar TargetPath/Arguments/WorkingDirectory/IconLocation y llamar a Save(). A efectos prácticos, es igual que con VBScript, aunque aprovechas la ergonomía y control de errores de PowerShell.

  Cómo consultar su crédito PostePay

En escenarios MDM/MECM/Intune, suele aparecer un matiz: cuando el script corre como Sistema (S-1-5-18), el escritorio objetivo probablemente sea el Público (Public\Desktop), mientras que si corre en contexto de usuario debe ir a ::GetFolderPath(«Desktop»).

En un ejemplo real, una función Get-DesktopDir devolvía la ruta correcta según si se ejecutaba como Sistema, pero el autor no asignaba el resultado a una variable global y luego referenciaba $DesktopDir sin haberlo establecido. Solución: captura el retorno en $DesktopDir o pásalo explícitamente como parámetro a las funciones que lo necesiten.

Otro añadido interesante es fijar una carpeta contenedora (por ejemplo, «SharePoint Shortcuts» en el Escritorio) y anclarla al Acceso rápido usando Shell.Application e invocando el verbo apropiado si aún no está anclada.

# Esqueleto PowerShell simplificado (COM WSH)
$Wsh = New-Object -ComObject WScript.Shell
$dest = Join-Path $env:PUBLIC 'Desktop\\MiApp.lnk'
$sc = $Wsh.CreateShortcut($dest)
$sc.TargetPath = 'C:\\Program Files\\MiApp\\MiApp.exe'
$sc.Arguments = '--modo silencioso'
$sc.WorkingDirectory = 'C:\\Program Files\\MiApp'
$sc.IconLocation = '%SystemRoot%\\System32\\shell32.dll,66'
$sc.Save()

Para atajos web vía PowerShell, también puedes crear .url escribiendo un texto INI con secciones , URL=…, IconFile=…, IconIndex=…. Es rápido, legible y muy fácil de versionar.

MSIX + PSF: crear accesos al instalar y mantener iconos

Si empaquetas con MSIX y necesitas dejar un acceso en el Escritorio, la aproximación más limpia es usar Package Support Framework (PSF) para ejecutar scripts al primer arranque y copiar el .lnk (y su icono) fuera del contenedor.

El reto con MSIX es que la ruta de instalación incluye número de versión (p. ej., C:\Archivos de programa\WindowsApps\App_1.0.0.0_x86__…). Para no romper el acceso en cada actualización, define un AppExecutionAlias en el manifiesto y apunta el acceso a %localappdata%\Microsoft\WindowsApps\tuapp.exe.

Pasos de manifiesto: añade los namespaces uap3 y desktop, incluye la extensión windows.appExecutionAlias con el ejecutable real y el alias (por ejemplo, contosoexpenses.exe) y, si usas PSF, cambia el EntryPoint para que lance PSFLauncher32.exe o su homólogo de 64 bits.

<Extensions>
  <uap3:Extension Category="windows.appExecutionAlias" Executable="App\\App.exe" EntryPoint="Windows.FullTrustApplication">
    <uap3:AppExecutionAlias>
      <desktop:ExecutionAlias Alias="miapp.exe" />
    </uap3:AppExecutionAlias>
  </uap3:Extension>
</Extensions>

Configura PSF con un config.json en la raíz del paquete para ejecutar un script al primer inicio que copie el .lnk al Escritorio y el icono a una ruta sin número de versión (por ejemplo, %localappdata%\Packages\TuApp_…\LocalCache\Roaming).

{
  "applications": 
}

El script de ejemplo suele hacer dos copias: el acceso «App.lnk» desde el paquete al Escritorio del usuario y el icono .ico a %APPDATA% (la ruta Roaming del contenedor MSIX) para referenciarlo en el acceso sin depender de versiones.

# createshortcut.ps1 (idea)
Copy-Item "App.lnk" "$env:USERPROFILE\\Desktop\\App.lnk" -Force
Copy-Item "app.ico" "$env:APPDATA\\app.ico" -Force

No olvides que, por diseño, conviene crear accesos sólo si son necesarios para no saturar el Escritorio del usuario. En MSIX esto cobra especial importancia por UX y mantenimiento.

Propiedades clave: iconos, hotkeys y estilos de ventana

Iconos: puedes usar un .ico dedicado o iconos embebidos en .exe/.dll con la sintaxis «ruta,Índice» (p. ej., shell32.dll,66). En .lnk basta con IconLocation; en .url, añade IconFile e IconIndex dentro del archivo de atajo.

  Lista de aplicaciones de Microsoft disponibles para Android

Hotkeys: IWshShortcut expone la propiedad Hotkey, y es común la sintaxis «ALT+CTRL+Letra». Para combinaciones avanzadas y atajos globales consulta accesos directos de WinKey. Comprueba que la tecla sea válida (A–Z) si construyes el valor dinámicamente.

WindowStyle: según el entorno, 1/4 corresponde a normal, 3 a maximizado, 7 a minimizado. Revisa el comportamiento en tu lenguaje/script y pruébalo in situ para evitar sorpresas con determinadas shells.

WSH más allá de los accesos: ideas y utilidades

El ecosistema WSH da para mucho más. Con WScript.Shell puedes leer y escribir el Registro (RegRead/RegWrite/RegDelete), lanzar procesos (Run/Exec), mostrar popups o recuperar carpetas especiales y variables de entorno.

La colección de ejemplos clásica incluye tareas como: gestión de impresoras de red (EnumPrinterConnections, AddWindowsPrinterConnection, RemovePrinterConnection), mapeo de unidades (MapNetworkDrive/RemoveNetworkDrive), enumerar drives de red (EnumNetworkDrives) o abrir el diálogo Buscar carpeta.

También hay muestras para configuración regional vía Registro, registrar un ejecutable para que arranque con Windows (RegWrite a Run/RunOnce), listar rutas especiales en un ListBox, leer la velocidad del CPU del Registro, asociar extensiones de archivo e incluso modificar combinaciones como Ctrl+Alt+Supr en XP/NT mediante claves del sistema.

Todo ello evidencia que WSH, aunque veterano, sigue siendo potente y práctico para automatización ligera en entornos Windows de escritorio.

Histórico: crear accesos con DDE (curiosidad técnica)

Antes del WSH, una forma de crear iconos en el menú Programas era usar DDE con Program Manager. Era frágil (limitaciones con caracteres, ubicaciones y sincronía), pero funcionaba en Windows 3.x y primeras hornadas.

Hoy día no tiene sentido operativo salvo por cultura general: WSH/PowerShell y MSIX/PSF ofrecen métodos estables y soportados que cubren todos los casos modernos sin acrobacias.

Buenas prácticas, compatibilidad y seguridad

Procura no llenar el Escritorio de accesos. Crea sólo los imprescindibles y valora apuntar al menú Inicio o a una carpeta dedicada para no estorbar al usuario.

Si el script corre como Sistema, escribe en Public\Desktop. Si corre en contexto de usuario, utiliza su Escritorio. Detecta el SID S-1-5-18 o usa APIs para tomar la ruta correcta y evitar confusiones.

Cuida las rutas con espacios (si necesitas construir cadenas para logs o .url), utiliza variables de entorno como %SystemRoot%, %ProgramFiles%, %LocalAppData% y prueba en máquinas con UAC y políticas estándar.

En entornos corporativos, firma scripts, controla permisos y documenta el ciclo de vida del acceso (creación, actualización, retirada). Con MSIX, apóyate en AppExecutionAlias y PSF para reducir dependencias de la ruta versionada.

Con todo lo anterior tienes el abanico completo: WSH para compatibilidad total, VB/VBA si ya trabajas en Office/legacy, PowerShell para despliegues modernos e Intune, y MSIX/PSF cuando empaquetas aplicaciones. Combinando alias de ejecución, carpetas especiales, propiedades de los accesos e iconos bien resueltos, tus atajos funcionarán y sobrevivirán a actualizaciones sin dolores de cabeza.

Artículo relacionado:
¿Cuáles son los accesos directos de la computadora?