- WSH cho phép bạn tạo các phím tắt .lnk và .url từ VBScript, VBA, VB6, VFP và PowerShell với đối tượng WScript.Shell.
- Trong triển khai CNTT, ngữ cảnh (người dùng so với HỆ THỐNG) quyết định sử dụng máy tính để bàn công cộng hay máy tính để bàn của người dùng.
- Với MSIX/PSF, AppExecutionAlias tránh các đường dẫn có phiên bản và tạo điều kiện truy cập liên tục.
- Biểu tượng, đối số, phím tắt và kiểu cửa sổ được điều khiển bởi các thuộc tính phím tắt.
Việc tạo lối tắt không chỉ mang lại sự tiện lợi: đó là cách tự động hóa các tác vụ và cải thiện năng suất hàng ngày của bạn. Cửa sổ. Cửa sổ Script Máy chủ (WSH) Nó cung cấp một cách đơn giản và mạnh mẽ để tạo liên kết đến các ứng dụng, tài liệu và địa chỉ web từ nhiều ngôn ngữ lập trình.
Trong hướng dẫn thực tế này, chúng tôi tập hợp các kỹ thuật đã được chứng minh với VBScript, PowerShell, Visual Basic, Visual FoxPro và các kịch bản hiện đại với các gói MSIX và PSFMục tiêu là cho phép bạn chọn phương pháp phù hợp nhất với môi trường của mình (người dùng cuối, CNTT, Intune/SCCM hoặc đóng gói) và triển khai phương pháp đó một cách tự tin.
Windows Script Host là gì và tại sao bạn có thể quan tâm
Windows Script Host là cơ sở hạ tầng cho phép bạn chạy VBScript và JScript có sẵn trên Windows, ngoài việc cung cấp mô hình đối tượng COM để tự động hóa các tác vụ hệ thống. Đối tượng WScript.Shell Đây là phần quan trọng để tạo các phím tắt trên màn hình nền, phím tắt trong menu Bắt đầu hoặc các thư mục đặc biệt.
WSH đã là một phần của Windows kể từ các phiên bản như Windows 98 và 2000và có thể được thêm vào các phiên bản cũ hơn như Windows NT 4.0 bằng các thành phần tùy chọn. Trong các hệ thống hiện đại, nó được tích hợp và trên thực tế, chỉ cần có các tệp thực thi wscript.exe và cscript.exe để khởi chạy các tập lệnh.
Các yêu cầu và thực hành tốt nhất trước khi bắt đầu
Trước khi bắt đầu, bạn nên xem lại một số điểm cơ bản. Xác minh rằng WSH có sẵn và không có chính sách nào chặn thực thi tập lệnh. Trong môi trường doanh nghiệp, GPO và cài đặt chống vi-rút có thể ảnh hưởng đến VBScript hoặc PowerShell.
Tránh làm lộn xộn màn hình nền bằng các phím tắt. Chỉ tạo quyền truy cập khi chúng có giá trị và nếu bạn phân phối chúng một cách tập trung, hãy xác định một tiêu chí rõ ràng (ví dụ: thư mục làm việc hoặc ứng dụng doanh nghiệp quan trọng).
Nếu tập lệnh được chạy như HỆ THỐNG hoặc trong ngữ cảnh máy móc (Intune/SCCM), hãy suy nghĩ kỹ về nơi bạn viết .lnk: bạn có thể muốn sử dụng máy tính để bàn công cộng (C:\\Users\\Public\\Desktop) thay vì máy tính để bàn của người dùng hiện tại.
Kiểm tra đường dẫn đích, quyền và biến môi trườngMột lỗi thường gặp là trỏ đến các đường dẫn có phiên bản thay đổi (Program Files\\WindowsApps) hoặc sử dụng UNC mà không có quyền truy cập từ tài khoản đang chạy tập lệnh.
Các thư mục đặc biệt và cách giải quyết đường dẫn của chúng
WSH giải quyết các tên thư mục đặc biệt thành đường dẫn thực tế của chúng bằng cách sử dụng WshShell.SpecialFoldersTrong số những mục hữu ích nhất là Desktop, StartMenu, Programs, Startup hoặc Favorites, cũng như các biến thể của chúng dành cho tất cả người dùng (AllUsersDesktop, AllUsersStartMenu, v.v.). Điều này cho phép bạn được độc lập của ngôn ngữ và cấu trúc chính xác của hồ sơ.
Nếu bạn đang làm việc với Visual Basic cổ điển hoặc muốn lấy các tuyến đường từ API, bạn có thể sử dụng SHGetSpecialFolderLocation/SHGetPathFromIDList để liệt kê các đường dẫn như Màn hình nền, Chương trình gần đây hoặc Tài liệu. Nó hữu ích khi bạn tích hợp vào các ứng dụng không phụ thuộc trực tiếp vào đối tượng WScript.
Mẫu cơ bản: Tạo phím tắt bằng WScript.Shell
Quy trình rất đơn giản: tạo phiên bản COM, tạo lối tắt, điền thuộc tính và lưu. Mẫu này được lặp lại trong VBScript, VBA, VB6, VFP và PowerShell với những thay đổi nhỏ về cú pháp.
' 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 Mẫu thì tương đương, chỉ có cú pháp và nơi bạn lưu trữ mã thay đổi. Bạn có thể tạo lối tắt trên màn hình nền, gán mô tả, biểu tượng, phím nóng và kiểu cửa sổ:
' 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
với VisualFoxPro Bạn cũng có thể sử dụng đối tượng WScript.Shell. Ý tưởng cũng giống hệt: định vị Desktop, tạo .lnk và thiết lập các thuộc tính như WindowStyle, IconLocation, TargetPath hoặc tổ hợp phím.
* 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
Trong mọi trường hợp, cốt lõi đều giống nhau: Tạo Shortcut, TargetPath, LưuTừ đó, tùy chỉnh các đối số, biểu tượng, thư mục làm việc và kiểu cửa sổ theo nhu cầu.
Đối số, kiểu cửa sổ, biểu tượng và phím tắt
Khi quyền truy cập phải khởi chạy một ứng dụng với các tham số, chỉ cần điền vào .Các đối số. Đối với quá trình khởi động trong một thư mục cụ thể, sử dụng .WorkingDirectory với lộ trình đúng.
Đối với cái nhìn, xác định .Vị trí biểu tượng trỏ đến tệp .ico hoặc tài nguyên trong tệp .exe/.dll (bạn có thể chỉ định chỉ mục sau dấu phẩy). Hành vi mở được điều khiển bằng .Kiểu cửa sổ: 3 phóng to, 7 thu nhỏ, 4 bình thường.
Nếu bạn muốn một tổ hợp phím, hãy sử dụng .Phím nóng với mẫu ALT+CTRL+Chữ cái (ví dụ: ALT+CTRL+N). Phép gán này tăng tốc độ mở, nhưng Không nên chỉ định quá nhiều để không ảnh hưởng đến các phím tắt của hệ thống.
Các phím tắt URL (.url)
Ngoài ứng dụng .lnks, WSH có thể tạo các phím tắt .url để mở trình duyệt mặc định. TargetPath trỏ đến địa chỉ web và nếu bạn cần biểu tượng riêng, bạn có thể chỉnh sửa tệp .url sau để thêm IconFile và 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
Cách tiếp cận này là lý tưởng cho liên kết đến SharePoint, mạng nội bộ hoặc ứng dụng web mà bạn muốn để trên màn hình của người dùng.
PowerShell dành cho CNTT: Intune, SCCM và triển khai quy mô lớn
PowerShell kết hợp quyền truy cập vào cùng một mô hình COM như WSH, do đó bạn có thể tạo quyền truy cập và phân phối nó hàng loạt. Điều bình thường là phát hiện đúng máy tính để bàn (người dùng hoặc công khai), tạo thư mục đích và nếu cần, ghim đường dẫn trong Truy cập nhanh.
# 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
Trong các triển khai với Trong giai điệuMẫu này cho phép bạn tạo một thư mục trên máy tính để bàn và cấp quyền truy cập vào Edge bằng các tham số như URL SharePoint. Nếu chạy dưới dạng SYSTEM, màn hình mục tiêu sẽ là màn hình công khai, hiển thị cho tất cả các hồ sơ.
En SCCMNếu bạn muốn triển khai tệp .lnk được tạo sẵn, lệnh tối thiểu có thể đơn giản như sao chép tệp đó vào màn hình công cộng: Copy-Item \\server\\path\\access.lnk C:\\Users\\Public\\DesktopNếu không xuất hiện, hãy kiểm tra những điểm sau:
- Bối cảnh thực hiện: Đảm bảo chương trình chạy với đủ quyền và trên hệ thống/người dùng mong muốn.
- Truy cập vào tài nguyên được chia sẻ: Tài khoản đang chạy phải có khả năng đọc đường dẫn UNC.
- Các tuyến đường có khoảng trống: Đặt -Path và -Destination trong dấu ngoặc kép.
- bit: Trong môi trường hỗn hợp 32/64-bit, xác nhận rằng không có chuyển hướng không mong muốn.
Ghim vào Truy cập nhanh với Shell.Application
Ngoài màn hình nền, bạn có thể ghim các thư mục vào Truy cập nhanh với đối tượng COM Shell.Application. Điều này hữu ích khi bạn tạo đường dẫn liên kết và muốn nó có thể truy cập được trong 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")
}
Nếu bạn quản lý nhóm và muốn người dùng nhanh chóng tìm thấy lối tắt của họ, Hành động nhỏ này tạo nên sự khác biệt trong ngày của họ.
MSIX và PSF: Tạo quyền truy cập mà không cần dựa vào đường dẫn có phiên bản
Khi bạn đóng gói các ứng dụng với MSIX, đường dẫn cài đặt bao gồm phiên bản (ví dụ: C:\\Program Files\\WindowsApps\\MyApp_1.0.0.0_x86__…). Đường dẫn này thay đổi sau mỗi bản cập nhật, vì vậy, không nên đặt .lnk theo đường dẫn đó. Giải pháp: AppExecutionAliasBằng cách xác định một bí danh trong tệp kê khai, bạn có thể khởi chạy ứng dụng bằng %localappdata%\\Microsoft\\WindowsApps\\myapp.exe mà không bị ràng buộc vào phiên bản.
Để thực hiện việc này, hãy thêm các không gian tên vào manifest (uap3 và desktop) và tạo phần mở rộng windows.appExecutionAlias trỏ đến tệp thực thi của gói. Nhớ thêm tên vào IgnorableNamespaces để manifest nhận dạng được.
Sau đó, bạn có thể thay đổi điểm nhập ứng dụng thành PSFLauncher32.exe/PSFLauncher64.exe (tùy thuộc vào kiến trúc) và ủy quyền việc tạo quyền truy cập vào tập lệnh khởi động được xác định trong config.json bằng PSF. Tập lệnh chạy một lần khi khởi tạo lần đầu.
{
"applications": [
{
"id": "App",
"executable": "MiApp\\MiApp.exe",
"workingDirectory": "MiApp\\",
"startScript": {
"scriptPath": "createshortcut.ps1",
"runInVirtualEnvironment": false,
"waitForScriptToFinish": true,
"showWindow": false,
"runOnce": true
}
}
]
}
PowerShell createshortcut.ps1 Bạn có thể sao chép tệp .lnk có sẵn từ gói vào màn hình của người dùng và cũng có thể đưa biểu tượng vào không gian làm việc. LocalCache\\Chuyển vùng vẫn ổn định giữa các phiên bản.
# 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
Với cách tiếp cận này, bạn đảm bảo rằng quyền truy cập hoạt động sau khi cập nhật, không chạm vào .lnk trong mỗi phiên bản. Nếu đường dẫn trỏ đến bí danh (ví dụ: %localappdata%\\Microsoft\\WindowsApps\\myapp.exe), đường dẫn vẫn hợp lệ.
Xử lý lỗi và xác thực được đề xuất
Trước khi tạo .lnk, bạn nên xác thực rằng TargetPath tồn tại (trừ khi bạn sử dụng các biến như %windir% hoặc bí danh). Trong VBA/VB6, bạn có thể cảnh báo nếu tệp thực thi bị thiếu hoặc hủy thao tác; trong PowerShell, hãy sử dụng Test-Path để kiểm tra xem đường dẫn có thể truy cập được hay không.
Nếu đường dẫn biểu tượng là một mạng .icoMột chiến thuật hữu ích là sao chép nó vào thư mục tạm thời hoặc APPDATA của người dùng và tham chiếu từ đó. Đây là cách bạn tránh các biểu tượng bị hỏng nếu tài nguyên mạng không khả dụng.
Khi chỉnh sửa các phím tắt .url, nếu bạn cần biểu tượng riêng, hãy mở lại tệp dưới dạng văn bản và thêm IconFile và IconIndex ở cuối. Điều này cho phép bạn kiểm soát hoàn toàn giao diện của nó mà không cần dựa vào trình duyệt.
Khi bạn chấm dứt COM, giải phóng các đối tượng với Phát hànhComObject trong PowerShell hoặc gán Nothing trong VB/VBA. Đây là một chi tiết nhỏ, nhưng giúp tránh tình trạng treo tài nguyên trong các cuộc hành quyết dữ dội.
Các trường hợp lỗi điển hình và cách giải quyết
Nếu triển khai của SCCM kết thúc bằng mã 0 nhưng quyền truy cập không xuất hiện, trước tiên hãy kiểm tra người dùng mục tiêu của máy tính để bànNếu bạn đang chạy với quyền SYSTEM và nhập %USERPROFILE%\Desktop vào hồ sơ tương tác, bạn sẽ không thấy gì cả. Hãy sử dụng C:\Users\Public\Desktop để mọi người đều có thể nhìn thấy.
Trong Intune, khi bạn tạo lời nhắc Edge với các đối số (ví dụ: URL có khoảng trắng được mã hóa), hãy xác nhận rằng dấu ngoặc kép là tốt trong -ShortcutArguments và văn bản sẽ được gửi đến nguyên vẹn. Một khoảng trống không đúng chỗ có thể phá vỡ số phận của .lnk.
Đối với các thư mục lối tắt của công ty (ví dụ: "Phím tắt SharePoint"), trước tiên hãy tạo thư mục trên màn hình nền chính xác và nếu bạn muốn làm nổi bật thư mục đó trong Explorer, neo vào Truy cập nhanh như chúng ta đã thấy với Shell.Application.
Nếu bạn phân phối .lnk đã được xây dựng trong gói MSIX đang được cập nhật, đừng trỏ nó đến đường dẫn có phiên bản trong WindowsApps. Sử dụng AppExecutionAlias và sao chép biểu tượng ra khỏi thư mục có phiên bản.
Các mẹo hữu ích với biến và đường dẫn
Để viết các tập lệnh di động, hãy dựa vào Các biến môi trường: %windir%, %systemroot%, %ProgramFiles% và các tập tin tương tự. Trong WSH, bạn có thể mở rộng chúng bằng Mở rộng chuỗi môi trườngvà trong PowerShell, bạn có thể tham chiếu đến chúng thông qua $env:VARIABLE.
Khi xây dựng các tuyến đường động, hãy kiểm tra xem thư mục làm việc kết thúc bằng \ để tránh trùng lặp các thanh hoặc phá vỡ TargetPath khi nối. Đó là một lan can nhỏ tránh những sai lầm tinh vi trong sản xuất.
Đối với các phím tắt yêu cầu tham số phức tạp, hãy cân nhắc viết một tập lệnh .cmd hoặc .ps1 nhỏ và để phím tắt trỏ tới tập lệnh đó. Đây là cách bạn đơn giản hóa .lnk và bạn có thể kiểm soát tốt hơn việc trích dẫn và thứ tự lập luận.
Nếu bạn cần phím nóng, hãy thử đặt trước các kết hợp với những chữ cái có ý nghĩa và tránh xung đột với các phím tắt thông thường. Trong môi trường có nhiều ứng dụng, hãy ghi lại các phím tắt để người dùng có thể tận dụng lợi thế mà không cần thử nghiệm và sai sót.
Bạn có nhiều lựa chọn để tạo lối tắt trong Windows theo cách đáng tin cậy và linh hoạt. WSH là cơ sở chungvà trên hết, bạn có thể chọn lớp: tập lệnh cổ điển, PowerShell hiện đại hoặc gói MSIX với PSF khi bạn đang tìm kiếm các quy trình có thể lặp lại ở quy mô lớn. Điều quan trọng là chọn đúng đường dẫn, xác thực ngữ cảnh thực thi và tránh bị bó buộc vào các đường dẫn mong manh, có phiên bản.
Người viết đam mê về thế giới byte và công nghệ nói chung. Tôi thích chia sẻ kiến thức của mình thông qua viết lách và đó là những gì tôi sẽ làm trong blog này, cho bạn thấy tất cả những điều thú vị nhất về tiện ích, phần mềm, phần cứng, xu hướng công nghệ, v.v. Mục tiêu của tôi là giúp bạn điều hướng thế giới kỹ thuật số một cách đơn giản và thú vị.