- WSH 允许您从 VBScript、VBA、VB6、VFP 和 PowerShell的 使用 WScript.Shell 对象。
- 在 IT 部署中,上下文(用户与系统)决定是否使用公共桌面或用户桌面。
- 通过 MSIX/PSF,AppExecutionAlias 避免了版本化路径并促进了持久访问。
- 图标、参数、热键和窗口样式由快捷方式属性控制。
创建快捷方式不仅仅是为了方便:它是一种自动执行任务并提高日常工作效率的方法。 Windows. Windows 脚本 主持人(WSH) 它提供了一种简单而强大的方法,可以通过多种脚本语言生成应用程序、文档和网址的链接。
在本实用指南中,我们汇集了经过验证的技术 VBScript、PowerShell、Visual Basic、Visual FoxPro 以及带有软件包的现代场景 MSIX 和 PSF目标是让您能够选择最适合您的环境(最终用户、IT、Intune/SCCM 或打包)的方法,并满怀信心地实施它。
什么是 Windows Script Host?为什么你可能会关心
Windows Script Host 是允许您运行 VBScript 和 JScript 在 Windows 上原生运行,此外还公开了 COM 对象模型来自动执行系统任务。 WScript.Shell 对象 它是创建桌面快捷方式、开始菜单快捷方式或特殊文件夹的关键部分。
WSH 自从以下版本以来一直是 Windows 的一部分 Windows 98和2000,并且可以使用可选组件添加到旧版本(如 Windows NT 4.0)中。 在现代系统中它集成 实际上,拥有可执行文件 wscript.exe 和 cscript.exe 来启动脚本就足够了。
开始之前的要求和最佳实践
在开始之前,最好先回顾一些基本要点。 验证 WSH 是否可用 并且没有阻止脚本执行的策略。在企业环境中,GPO 和防病毒设置可能会影响 VBScript 或 PowerShell。
避免快捷方式弄乱您的桌面。 仅在增加价值时才创建访问权限 如果你集中分发它们,请定义一个明确的标准(例如,工作文件夹或 应用 关键企业)。
如果脚本运行如下 SYSTEM 或机器环境中 (Intune/SCCM),仔细考虑您在哪里写入 .lnk:您可能想要使用公共桌面(C:\\Users\\Public\\Desktop)而不是当前用户的桌面。
检查 目标路径、权限和环境变量一个典型的错误是指向版本不断变化(Program Files\\WindowsApps)的路径或使用没有运行脚本的帐户访问权限的 UNC。
特殊文件夹及其路径解析方法
WSH 使用以下方法将特殊文件夹名称解析为其实际路径 WshShell.特殊文件夹其中最有用的是桌面、开始菜单、程序、启动或收藏夹,以及所有用户的变体(AllUsersDesktop、AllUsersStartMenu 等)。 这让你能够独立 语言和个人资料的确切结构。
如果您正在使用经典 Visual Basic 或想要从 API 获取路由,则可以使用 SHGetSpecialFolderLocation/SHGetPathFromIDList 列出诸如桌面、最近的程序或文档等路径。 当您集成到应用程序中时它很有用 不直接依赖于 WScript 对象。
基本模式:使用 WScript.Shell 创建快捷方式
流程很简单:创建 COM 实例、生成快捷方式、填写属性并保存。 这种模式在 VBScript、VBA、VB6、VFP 和 PowerShell 中重复出现 句法上略有变化。
' 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 该模式等效,只有语法和代码托管位置会有所不同。您可以在桌面上创建快捷方式,指定描述、图标, 热键 和窗口样式:
' 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
连接器 Visual FoxPro中 你也可以使用 WScript.Shell 对象。思路相同:找到 Desktop,创建 .lnk 文件,然后设置如下属性: 窗口样式、图标位置、目标路径 或组合键。
* 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
在所有情况下,核心都是相同的: 创建快捷方式,目标路径,保存从那里,根据需要自定义参数、图标、工作目录和窗口样式。
参数、窗口样式、图标和快捷方式
当访问必须启动带有参数的应用程序时,只需填写 .参数. 对于过程 引导 在特定文件夹中,使用 .工作目录 走正确的路线。
对于外观,定义 .图标位置 指向 .ico 文件或 .exe/.dll 文件中的资源(可以在逗号后指定索引)。打开行为由 .WindowStyle:3 最大化,7 最小化,4 正常。
如果您想要组合键,请使用 .热键 使用 ALT+CTRL+字母组合键(例如,ALT+CTRL+N)。此组合键可加快打开速度,但 不建议分配太多 以免干扰系统快捷方式。
URL (.url) 快捷方式
除了应用程序 .lnks 之外,WSH 还可以创建打开默认浏览器的 .url 快捷方式。 TargetPath 指向网址 如果您需要自己的图标,您可以稍后编辑.url 文件以添加 IconFile 和 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
这种方法非常适合 链接到 SHAREPOINT、内联网或 Web 应用程序 您想将其留在用户的桌面上以供随时使用。
适用于 IT 的 PowerShell:Intune、SCCM 和大规模部署
PowerShell 包含对与 WSH 相同的 COM 模型的访问,因此您可以创建访问权限并批量分发。 通常的做法是检测正确的桌面 (用户或公共),生成目标文件夹,并在必要时在快速访问中固定路径。
# 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
在实施中 Intune的此模式允许您在桌面上创建一个文件夹,并使用 SharePoint URL 等参数将访问权限传递给 Edge。 如果以 SYSTEM 身份运行,目标桌面将是公共桌面,所有配置文件都可以看到。
En SCCM如果您希望部署预制的 .lnk,则最小命令可以简单到将其复制到公共桌面: 复制项目 \\server\\path\\access.lnk C:\\Users\\Public\\Desktop如果没有出现,请检查以下几点:
- 执行上下文:确保程序在预期的用户/系统上以足够的权限运行。
- 访问共享资源:运行帐户必须能够读取 UNC 路径。
- 带空格的路线:将 -Path 和 -Destination 括在引号中。
- 位数:在混合 32/64 位环境中,确认没有不需要的重定向。
使用 Shell.Application 固定到快速访问
除了桌面之外,您还可以将文件夹固定到 快速访问 使用 Shell.Application COM 对象。当您创建绑定路径并希望其在资源管理器中可访问时,这很有用。
# 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")
}
如果您管理团队并希望用户快速找到他们的快捷方式, 这个小举动会带来改变 在他们的日常中。
MSIX 和 PSF:无需依赖版本化路径即可创建访问权限
当您使用以下方式打包应用程序时 MSIX安装路径包含版本信息(例如,C:\\Program Files\\WindowsApps\\MyApp_1.0.0.0_x86__…)。每次更新后,安装路径都会发生变化,因此最好不要设置包含该路径的 .lnk 文件。 解决方案:AppExecutionAlias通过在清单中定义别名,您可以使用 %localappdata%\\Microsoft\\WindowsApps\\myapp.exe 启动应用程序,而不受版本限制。
为此,请在清单中添加命名空间(uap3 和桌面)并创建扩展 windows.appExecutionAlias 指向包的可执行文件。请记住将名称包含在 IgnorableNamespaces 中,以便清单能够识别它们。
之后,您可以将应用程序入口点更改为 PSFLauncher32.exe/PSFLauncher64.exe (取决于架构)并使用 PSF 将访问的创建委托给 config.json 中定义的启动脚本。 脚本运行一次 首次初始化时。
{
"applications": [
{
"id": "App",
"executable": "MiApp\\MiApp.exe",
"workingDirectory": "MiApp\\",
"startScript": {
"scriptPath": "createshortcut.ps1",
"runInVirtualEnvironment": false,
"waitForScriptToFinish": true,
"showWindow": false,
"runOnce": true
}
}
]
}
PowerShell 创建快捷方式.ps1 您可以将现成的 .lnk 文件从包中复制到用户的桌面,并将图标带到工作区。 LocalCache\\漫游 各个版本之间保持稳定。
# 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
通过这种方法,您可以确保更新后访问正常, 无需修改每个版本中的 .lnk。如果路径指向别名(例如,%localappdata%\\Microsoft\\WindowsApps\\myapp.exe),则该路径仍然有效。
错误处理和建议的验证
在生成 .lnk 之前,建议验证 TargetPath 存在 (除非您使用 %windir% 之类的变量或别名)。在 VBA/VB6 中,如果可执行文件丢失,您可以发出警报或取消操作;在 PowerShell 中,使用 Test-Path 检查路径是否可访问。
如果图标路径是 .ico 网络,一个有用的策略是将其复制到用户的临时或 APPDATA 文件夹,然后从那里引用它。 这是避免图标损坏的方法 如果网络资源不可用。
编辑 .url 快捷方式时,如果需要自己的图标,请重新打开文件作为文本并添加 IconFile 和 IconIndex 在末尾。这样您就可以完全控制其外观,而无需依赖浏览器。
当您终止 COM 时,释放对象 发布对象 在 PowerShell 中,或者在 VB/VBA 中赋值 Nothing。这只是一个小细节,但 有助于避免资源挂起 在密集的处决中。
典型故障案例及解决方法
如果 SCCM 部署以代码 0 结束,但未出现访问权限,请首先检查 桌面的目标用户如果您以 SYSTEM 身份运行,并在交互式配置文件中输入 %USERPROFILE%\Desktop,则不会看到任何内容。请使用 C:\Users\Public\Desktop 将其设置为对所有人可见。
在 Intune 中,当您生成带有参数的 Edge 提示(例如,带有编码空格的 URL)时,请确认 引号没问题 在 -ShortcutArguments 中,文本完好无损地到达。 一个空格不合适 可以打破.lnk的命运。
对于公司快捷方式文件夹(例如“SharePoint 快捷方式”),首先在正确的桌面上创建该文件夹,如果要在资源管理器中突出显示它, 锚点至快速访问 正如我们在 Shell.Application 中看到的那样。
如果您在正在更新的 MSIX 包中分发已构建的 .lnk,请不要将其指向 WindowsApps 中的版本路径。 使用 AppExecutionAlias 并将图标从版本文件夹中复制出来。
变量和路径的实用技巧
要编写可移植脚本,请依赖 环境变量: %windir%、%systemroot%、%ProgramFiles% 等。在 WSH 中,您可以使用以下命令展开它们 展开环境字符串,并且在 PowerShell 中您可以通过 $env:VARIABLE 引用它们。
在构建动态路由时,检查 工作文件夹以 \ 结尾 以避免在连接时出现重复的条形或破坏 TargetPath。这是一个小护栏, 避免细微的错误 在生产中。
对于需要复杂参数的快捷方式,请考虑编写一个小的 .cmd 或 .ps1 脚本并让快捷方式指向它。 这是简化 .lnk 的方法 并且您可以更好地控制引用和参数顺序。
如果您需要热键,请尝试使用 重要字母 并避免与常用快捷键冲突。在包含多个应用的环境中,请记录快捷键,以便用户 无需反复试验即可利用.
您可以通过多种方式以可靠且灵活的方式在 Windows 中创建快捷方式。 WSH 是通用基础除此之外,您还可以选择以下层级:经典脚本、现代 PowerShell 或使用 PSF 的 MSIX 打包(如果您需要大规模重复的流程)。关键在于选择正确的路径,验证执行上下文,并避免陷入脆弱的版本化路径。
对字节世界和一般技术充满热情的作家。我喜欢通过写作分享我的知识,这就是我在这个博客中要做的,向您展示有关小工具、软件、硬件、技术趋势等的所有最有趣的事情。我的目标是帮助您以简单而有趣的方式畅游数字世界。