Crie atalhos personalizados com o Windows Script Host

Última atualização: 29/09/2025
autor: Isaac
  • O WSH permite que você crie atalhos .lnk e .url do VBScript, VBA, VB6, VFP e PowerShell com o objeto WScript.Shell.
  • Em implantações de TI, o contexto (usuário vs. SISTEMA) decide se deve ser usado o desktop público ou do usuário.
  • Com MSIX/PSF, o AppExecutionAlias ​​​​evita caminhos versionados e facilita o acesso persistente.
  • Ícones, argumentos, teclas de atalho e estilos de janela são controlados pelas propriedades do atalho.

Atalhos no Windows com WSH

Criar atalhos não é apenas uma conveniência: é uma maneira de automatizar tarefas e melhorar sua produtividade diária. Windows. Windows Script Anfitrião (WSH) Ele oferece uma maneira simples e poderosa de gerar links para aplicativos, documentos e endereços da web a partir de várias linguagens de script.

Neste guia prático reunimos técnicas comprovadas com VBScript, PowerShell, Visual Basic, Visual FoxPro e cenários modernos com pacotes MSIX e PSFO objetivo é permitir que você escolha a abordagem que melhor se adapta ao seu ambiente (usuário final, TI, Intune/SCCM ou pacote) e implemente-a com confiança.

O que é o Windows Script Host e por que você pode se interessar

O Windows Script Host é a infraestrutura que permite que você execute VBScript e JScript nativamente no Windows, além de expor um modelo de objeto COM para automatizar tarefas do sistema. O objeto WScript.Shell É a peça chave para criar atalhos na área de trabalho, atalhos do menu Iniciar ou pastas especiais.

O WSH faz parte do Windows desde versões como Windows 98 e 2000e pode ser adicionado a edições mais antigas, como o Windows NT 4.0, usando componentes opcionais. Nos sistemas modernos ele vem integrado e na prática, basta ter os executáveis ​​wscript.exe e cscript.exe para executar scripts.

Exemplos de scripts para atalhos

Requisitos e melhores práticas antes de começar

Antes de começar, é uma boa ideia revisar alguns pontos básicos. Verifique se o WSH está disponível e não há políticas bloqueando a execução de scripts. Em ambientes corporativos, GPOs e configurações de antivírus podem afetar o VBScript ou o PowerShell.

Evite encher sua área de trabalho com atalhos. Crie acessos somente quando eles agregarem valor e se você distribuí-los centralmente, defina um critério claro (por exemplo, pastas de trabalho ou Aplicativos corporativo crítico).

Se o script for executado como SISTEMA ou em contexto de máquina (Intune/SCCM), pense cuidadosamente sobre onde você escreve o .lnk: você pode querer usar a área de trabalho pública (C:\\Usuários\\Público\\Área de Trabalho) em vez da área de trabalho do usuário atual.

Verifica a caminho de destino, permissões e variáveis ​​de ambienteUm erro típico é apontar para caminhos com versões alteradas (Arquivos de Programas\\WindowsApps) ou usar UNC sem acesso da conta que executa o script.

Pastas especiais e como resolver seus caminhos

O WSH resolve nomes de pastas especiais para seu caminho real usando WshShell.Pastas EspeciaisEntre os mais úteis estão Desktop, StartMenu, Programas, Inicialização ou Favoritos, bem como suas variantes para todos os usuários (AllUsersDesktop, AllUsersStartMenu, etc.). Isso permite que você seja independente da linguagem e da estrutura exata do perfil.

Se você estiver trabalhando com o Visual Basic clássico ou quiser obter rotas da API, você pode usar SHGetSpecialFolderLocation/SHGetPathFromIDList para listar caminhos como Área de Trabalho, Programas Recentes ou Documentos. É útil quando você integra em aplicativos que não dependem diretamente do objeto WScript.

Padrão básico: criando atalhos com WScript.Shell

O fluxo é simples: crie a instância COM, gere o atalho, preencha as propriedades e salve. Este padrão é repetido em VBScript, VBA, VB6, VFP e PowerShell com pequenas variações sintáticas.

' 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 O padrão é equivalente, apenas a sintaxe e o local onde você hospeda o código mudam. Você pode criar o atalho na área de trabalho, atribuir uma descrição, um ícone, tecla de atalho e estilo de janela:

' 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

Com Visual FoxPro Você também pode usar o objeto WScript.Shell. A ideia é idêntica: localize o Desktop, crie o .lnk e defina propriedades como Estilo da janela, Localização do ícone, Caminho de destino ou a combinação de teclas.

* 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

Em todos os casos, o núcleo é o mesmo: Criar atalho, Caminho de destino, SalvarA partir daí, personalize os argumentos, o ícone, o diretório de trabalho e o estilo da janela conforme necessário.

  Como transmitir vídeos pela rede com o VLC facilmente

Argumentos, estilo de janela, ícones e atalhos

Quando o acesso deve iniciar um aplicativo com parâmetros, basta preencher .Argumentos. Para o processo Bota em uma pasta específica, use .Diretório de Trabalho com a rota certa.

Para o visual, defina .IconLocation apontando para um .ico ou um recurso em um .exe/.dll (você pode especificar o índice após a vírgula). O comportamento de abertura é controlado com .Estilo de janela: 3 maximizados, 7 minimizados, 4 normais.

Se você quiser uma combinação de teclas, use .Tecla de atalho com o padrão ALT+CTRL+Letra (por exemplo, ALT+CTRL+N). Esta atribuição acelera a abertura, mas Não é aconselhável atribuir muitos para não interferir nos atalhos do sistema.

Atalhos de URL (.url)

Além dos arquivos .lnk do aplicativo, o WSH pode criar atalhos .url que abrem o navegador padrão. O TargetPath aponta para o endereço da web e se você precisar do seu próprio ícone, você pode editar o arquivo .url mais tarde para adicionar 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

Esta abordagem é ideal para links para SharePoint, intranet ou aplicações web que você deseja deixar à mão na área de trabalho do usuário.

PowerShell para TI: Intune, SCCM e implantações em larga escala

O PowerShell incorpora acesso ao mesmo modelo COM do WSH, para que você possa criar acesso e distribuí-lo em massa. O normal é detectar a área de trabalho correta (usuário ou público), gere pastas de destino e, se necessário, fixe caminhos no Acesso Rápido.

# 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

Em implementações com Em sintoniaEsse padrão permite que você crie uma pasta na sua área de trabalho e passe o acesso ao Edge com parâmetros como uma URL do SharePoint. Se executado como SYSTEM, a área de trabalho de destino será pública, visível para todos os perfis.

  Aprenda como impedir que outras pessoas controlem sua máquina Chromecast

En SCCMSe você preferir implantar um .lnk pré-fabricado, o comando mínimo pode ser tão simples quanto copiá-lo para a área de trabalho pública: Copiar-Item \\servidor\\caminho\\access.lnk C:\\Usuários\\Público\\Área de TrabalhoCaso não apareça, verifique estes pontos:

  • Contexto de execução: Certifique-se de que o programa seja executado com permissões suficientes e no usuário/sistema esperado.
  • Acesso ao recurso compartilhado: A conta em execução deve ser capaz de ler o caminho UNC.
  • Rotas com espaços: Coloque -Caminho e -Destino entre aspas.
  • Bitness: Em ambientes mistos de 32/64 bits, confirma que não há redirecionamentos indesejados.

Fixar no acesso rápido com Shell.Application

Além da área de trabalho, você pode fixar pastas em Acesso rápido com o objeto COM Shell.Application. Isso é útil quando você cria um caminho de vinculação e deseja que ele seja acessível no 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 você gerencia equipes e deseja que os usuários localizem rapidamente seus atalhos, Esta pequena ação faz a diferença em suas vidas diárias.

MSIX e PSF: Crie acesso sem depender de caminhos versionados

Quando você empacota aplicativos com MSIX, o caminho de instalação inclui a versão (por exemplo, C:\\Arquivos de Programas\\WindowsApps\\MyApp_1.0.0.0_x86__…). Ele muda a cada atualização, então não é uma boa ideia definir um .lnk com esse caminho. Solução: AppExecutionAliasAo definir um alias no manifesto, você pode iniciar o aplicativo com %localappdata%\\Microsoft\\WindowsApps\\myapp.exe sem estar vinculado à versão.

Para fazer isso, adicione os namespaces no manifesto (uap3 e desktop) e crie a extensão windows.appExecutionAlias apontando para o executável do pacote. Lembre-se de incluir os nomes em IgnorableNamespaces para que o manifesto os reconheça.

Depois, você pode alterar o ponto de entrada do aplicativo para PSFLauncher32.exe/PSFLauncher64.exe (dependendo da arquitetura) e delegar a criação do acesso a um script de inicialização definido em config.json usando PSF. O script é executado uma vez na primeira inicialização.

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

PowerShell criaatalho.ps1 Você pode copiar um arquivo .lnk pronto do pacote para a área de trabalho do usuário e também trazer um ícone para o espaço de trabalho. Cache local\\Roaming que permanece estável entre as versões.

# 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

Com essa abordagem você garante que o acesso funcione após uma atualização, sem tocar no .lnk em cada versão. Se o caminho apontar para o alias (por exemplo, %localappdata%\\Microsoft\\WindowsApps\\myapp.exe), o caminho ainda será válido.

Tratamento de erros e validações recomendadas

Antes de gerar o .lnk é aconselhável validar que o TargetPath existe (a menos que você use variáveis ​​como %windir% ou aliases). No VBA/VB6, você pode alertar se o executável estiver ausente ou cancelar a operação; no PowerShell, use Test-Path para verificar se o caminho está acessível.

  Como usar o FaceTime no seu PC com Windows

Se o caminho do ícone for um rede .ico, uma tática útil é copiá-lo para a pasta temp ou APPDATA do usuário e referenciá-lo a partir daí. É assim que você evita ícones quebrados se o recurso de rede não estiver disponível.

Ao editar atalhos .url, se você precisar de seu próprio ícone, reabra o arquivo como texto e adicione IconFile e IconIndex no final. Isso lhe dá controle total sobre sua aparência sem depender de um navegador.

Quando você encerra o COM, libere objetos com ReleaseComObject no PowerShell ou atribuir Nothing no VB/VBA. É um detalhe menor, mas ajuda a evitar recursos pendurados em execuções intensivas.

Casos típicos de falhas e como resolvê-los

Se uma implantação pelo SCCM terminar com o código 0, mas o acesso não aparecer, verifique primeiro o usuário alvo do desktopSe você estiver executando como SYSTEM e digitar %USERPROFILE%\Desktop no perfil interativo, não verá nada. Use C:\Users\Public\Desktop para torná-lo visível para todos.

No Intune, ao gerar prompts do Edge com argumentos (por exemplo, uma URL com espaços codificados), confirme se as aspas estão boas em -ShortcutArguments e o texto chega intacto. Um único espaço fora do lugar pode quebrar o destino do .lnk.

Para pastas de atalhos corporativos (por exemplo, "Atalhos do SharePoint"), primeiro crie a pasta na área de trabalho correta e, se quiser destacá-la no Explorer, âncora para acesso rápido como vimos com Shell.Application.

Se você distribuir o .lnk já criado em um pacote MSIX que está sendo atualizado, não o aponte para o caminho versionado dentro do WindowsApps. Usar AppExecutionAlias e copie o ícone da pasta versionada.

Truques úteis com variáveis ​​e caminhos

Para escrever scripts portáteis, confie em variáveis ​​ambientais: %windir%, %systemroot%, %ProgramFiles% e similares. No WSH você pode expandi-los com ExpandirEnvironmentStrings, e no PowerShell você pode referenciá-los via $env:VARIABLE.

Ao construir rotas dinâmicas, verifique se o pasta de trabalho termina em \ para evitar duplicar barras ou quebrar o TargetPath ao concatenar. É um pequeno guardrail que evite erros sutis em produção

Para atalhos que exigem parâmetros complexos, considere escrever um pequeno script .cmd ou .ps1 e fazer com que o atalho aponte para ele. É assim que você simplifica o .lnk e você tem melhor controle sobre a ordem das citações e dos argumentos.

Se precisar de teclas de atalho, tente reservar combinações com letras significativas e evitar conflitos com atalhos comuns. Em ambientes com muitos aplicativos, documente os atalhos para que o usuário possa aproveite sem tentativa e erro.

Você tem diversas opções para criar atalhos no Windows de forma confiável e flexível. WSH é a base comum, e além disso, você pode escolher a camada: scripts clássicos, PowerShell moderno ou empacotamento MSIX com PSF quando estiver buscando processos repetíveis em escala. O segredo é selecionar o caminho certo, validar o contexto de execução e evitar ficar preso a caminhos frágeis e versionados.