- WSH, VBScript, VBA, VB6, VFP ve .lnk'den .lnk ve .url kısayolları oluşturmanıza olanak tanır. PowerShell WScript.Shell nesnesi ile.
- BT dağıtımlarında, bağlam (kullanıcı ve SİSTEM) genel veya kullanıcı masaüstünün kullanılıp kullanılmayacağına karar verir.
- MSIX/PSF ile AppExecutionAlias, sürümlü yollardan kaçınır ve kalıcı erişimi kolaylaştırır.
- Simgeler, argümanlar, kısayol tuşları ve pencere stilleri kısayol özellikleriyle kontrol edilir.
Kısayollar oluşturmak yalnızca bir kolaylık değil: Görevleri otomatikleştirmenin ve günlük üretkenliğinizi artırmanın bir yoludur. Windows. Windows Senaryo Ev sahibi (WSH) Birden fazla betik dilinden uygulamalara, belgelere ve web adreslerine bağlantılar üretmenin basit ve güçlü bir yolunu sunar.
Bu pratik rehberde kanıtlanmış teknikleri bir araya getiriyoruz VBScript, PowerShell, Visual Basic, Visual FoxPro ve paketlerle modern senaryolar MSIX ve PSFAmaç, ortamınıza (son kullanıcı, BT, Intune/SCCM veya paketlenmiş) en uygun yaklaşımı seçmenizi ve bunu güvenle uygulamanızı sağlamaktır.
Windows Script Host nedir ve neden önemseyebilirsiniz?
Windows Script Host, Windows Script Host'u çalıştırmanıza olanak tanıyan altyapıdır. VBScript ve JScript Windows'ta doğal olarak kullanılabilir ve ayrıca sistem görevlerini otomatikleştirmek için bir COM nesne modeli ortaya çıkarır. WScript.Shell nesnesi Masaüstü kısayolları, Başlat menüsü kısayolları veya özel klasörler oluşturmanın temel parçasıdır.
WSH, Windows'un şu sürümlerinden beri bir parçasıdır: Windows 98 ve 2000ve isteğe bağlı bileşenler kullanılarak Windows NT 4.0 gibi eski sürümlere eklenebilir. Modern sistemlerde entegre olarak gelir ve pratikte, scriptleri çalıştırmak için wscript.exe ve cscript.exe çalıştırılabilir dosyalarına sahip olmak yeterlidir.
Başlamadan önce gereksinimler ve en iyi uygulamalar
Başlamadan önce bazı temel noktaları gözden geçirmekte fayda var. WSH'nin mevcut olduğunu doğrulayın ve betik yürütmeyi engelleyen herhangi bir politika yoktur. Kurumsal ortamlarda, GPO'lar ve antivirüs ayarları VBScript veya PowerShell'i etkileyebilir.
Masaüstünüzü kısayollarla doldurmaktan kaçının. Yalnızca değer kattıklarında erişimler oluşturun ve bunları merkezi olarak dağıtırsanız, net bir kriter tanımlayın (örneğin, çalışma klasörleri veya uygulamalar (kritik kurumsal).
Betik şu şekilde çalıştırılırsa SİSTEM veya makine bağlamında (Intune/SCCM), .lnk dosyasını nereye yazacağınızı dikkatlice düşünün: geçerli kullanıcının masaüstü yerine genel masaüstünü (C:\\Users\\Public\\Desktop) kullanmak isteyebilirsiniz.
Kontrol edin hedef yol, izinler ve ortam değişkenleriTipik bir hata, değişen sürümlere sahip yollara (Program Files\\WindowsApps) işaret etmek veya betiği çalıştıran hesaptan erişim olmadan UNC kullanmaktır.
Özel klasörler ve bunların yollarının nasıl çözüleceği
WSH, özel klasör adlarını gerçek yollarına göre çözümler WshShell.Özel KlasörlerEn kullanışlı olanlar arasında Masaüstü, Başlat Menüsü, Programlar, Başlangıç veya Sık Kullanılanlar ve bunların tüm kullanıcılar için olan varyantları (AllUsersDesktop, AllUsersStartMenu, vb.) yer almaktadır. Bu, bağımsız olmanızı sağlar Dilin ve profilin tam yapısının.
Klasik Visual Basic ile çalışıyorsanız veya API'den rotalar almak istiyorsanız, şunu kullanabilirsiniz: SHGetSpecialFolderLocation/SHGetPathFromIDList Masaüstü, Son Programlar veya Belgeler gibi yolları listelemek için. Uygulamalara entegre ettiğinizde faydalıdır WScript nesnesine doğrudan bağlı olmayanlar.
Temel Desen: WScript.Shell ile Kısayollar Oluşturma
Akış basittir: COM örneğini oluşturun, kısayolu oluşturun, özellikleri doldurun ve kaydedin. Bu desen VBScript, VBA, VB6, VFP ve PowerShell'de tekrarlanır küçük sözdizimsel farklılıklarla.
' 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 Desen aynıdır, yalnızca sözdizimi ve kodu barındırdığınız yer değişir. Masaüstünde kısayol oluşturabilir, bir açıklama, simge veya kısayol tuşu ve pencere stili:
' 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
ile Görsel FoxPro WScript.Shell nesnesini de kullanabilirsiniz. Fikir aynıdır: Masaüstünü bulun, .lnk dosyasını oluşturun ve şu gibi özellikleri ayarlayın: PencereStili, SimgeKonumu, HedefYolu veya tuş kombinasyonu.
* 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
Her iki durumda da temel aynı: Kısayol Oluştur, HedefYol, KaydetOradan argümanları, simgeyi, çalışma dizinini ve pencere stilini gerektiği gibi özelleştirin.
Argümanlar, pencere stili, simgeler ve kısayollar
Erişim, parametrelerle bir uygulamayı başlatmak zorunda olduğunda, yalnızca doldurun .ArgümanlarSüreç için çizme belirli bir klasörde kullanın .ÇalışmaDizin doğru rota ile.
Görünüm için tanımlayın .İkonKonumu .ico veya .exe/.dll dosyasındaki bir kaynağa işaret ediyor (virgülden sonra dizini belirtebilirsiniz). Açılış davranışı şu şekilde kontrol edilir: .PencereStili: 3 maksimize edilmiş, 7 minimize edilmiş, 4 normal.
Bir tuş kombinasyonu istiyorsanız, şunu kullanın: .Kısayol tuşu ALT+CTRL+Harf düzeniyle (örneğin, ALT+CTRL+N). Bu atama açılışı hızlandırır, ancak Çok fazla atama yapmak tavsiye edilmez Sistem kısayollarına müdahale etmemek için.
URL (.url) kısayolları
Uygulama .lnk'lerine ek olarak, WSH varsayılan tarayıcıyı açan .url kısayolları da oluşturabilir. TargetPath web adresini işaret ediyor ve eğer kendi ikonunuza ihtiyacınız varsa, daha sonra IconFile ve IconIndex'i eklemek için .url dosyasını düzenleyebilirsiniz.
' 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
Bu yaklaşım şu amaçlar için idealdir: bağlantılar SharePoint, intranet veya web uygulamaları Kullanıcının masaüstünde el altında bulundurmak isteyeceğiniz bir şey.
BT için PowerShell: Intune, SCCM ve Büyük Ölçekli Dağıtımlar
PowerShell, WSH ile aynı COM modeline erişimi bünyesinde barındırır, böylece erişimi oluşturabilir ve toplu olarak dağıtabilirsiniz. Genel olarak doğru masaüstünü tespit etmek önemlidir (kullanıcı veya genel), hedef klasörleri oluşturun ve gerekirse Hızlı Erişim'de yolları sabitleyin.
# 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
Uygulamalarda Uyum halindeBu desen, masaüstünüzde bir klasör oluşturmanıza ve SharePoint URL'si gibi parametrelerle Edge'e erişim sağlamanıza olanak tanır. SYSTEM olarak çalıştırılırsaHedef masaüstü, tüm profillerin görebileceği genel masaüstü olacaktır.
En SCCMÖnceden hazırlanmış bir .lnk dosyasını dağıtmayı tercih ederseniz, en basit komut onu herkese açık masaüstüne kopyalamak kadar basit olabilir: Kopyala-Öğesi \\sunucu\\yol\\access.lnk C:\\Kullanıcılar\\Genel\\MasaüstüEğer görünmüyorsa şu noktaları kontrol edin:
- Yürütme bağlamı: Programın yeterli izinlerle ve beklenen kullanıcı/sistem üzerinde çalıştığından emin olun.
- Paylaşılan kaynağa erişim: Çalışan hesabın UNC yolunu okuyabilmesi gerekir.
- Boşluklu rotalar: -Path ve -Destination ifadelerini tırnak içine alın.
- acı: Karma 32/64-bit ortamlarda, istenmeyen yönlendirmelerin olmadığını doğrular.
Shell.Application ile Hızlı Erişime Sabitle
Masaüstüne ek olarak, klasörleri sabitleyebilirsiniz Hızlı erişim Shell.Application COM nesnesiyle. Bu, bir bağlama yolu oluşturup Explorer'da erişilebilir olmasını istediğinizde faydalıdır.
# 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")
}
Ekipleri yönetiyorsanız ve kullanıcıların kısayollarını hızlı bir şekilde bulmasını istiyorsanız, Bu küçük eylem fark yaratır günden güne.
MSIX ve PSF: Sürüm yollarına güvenmeden erişim oluşturma
Uygulamaları paketlediğinizde MSIX, kurulum yolu sürümü içerir (örneğin, C:\\Program Files\\WindowsApps\\MyApp_1.0.0.0_x86__…). Her güncellemeyle değişir, bu nedenle bu yolu içeren bir .lnk dosyası ayarlamak kötü bir fikirdir. Çözüm: AppExecutionAliasManifest dosyasında bir takma ad tanımlayarak, sürüme bağlı kalmadan uygulamayı %localappdata%\\Microsoft\\WindowsApps\\myapp.exe ile başlatabilirsiniz.
Bunu yapmak için, manifest dosyasına ad alanlarını (uap3 ve masaüstü) ekleyin ve uzantıyı oluşturun windows.appExecutionAlias Paketin çalıştırılabilir dosyasına işaret ediyor. Manifest'in bunları tanıyabilmesi için adları IgnorableNamespaces'e eklemeyi unutmayın.
Daha sonra uygulama giriş noktasını şu şekilde değiştirebilirsiniz: PSFLauncher32.exe/PSFLauncher64.exe (mimariye bağlı olarak) ve config.json dosyasında tanımlanan bir başlangıç betiğine erişimin oluşturulmasını PSF kullanarak devredin. Betik bir kez çalışır ilk başlatmada.
{
"applications": [
{
"id": "App",
"executable": "MiApp\\MiApp.exe",
"workingDirectory": "MiApp\\",
"startScript": {
"scriptPath": "createshortcut.ps1",
"runInVirtualEnvironment": false,
"waitForScriptToFinish": true,
"showWindow": false,
"runOnce": true
}
}
]
}
PowerShell kısayolu oluşturur.ps1 Paket içerisinden hazır bir .lnk dosyasını kullanıcının masaüstüne kopyalayabilir, ayrıca çalışma alanına bir ikon getirebilirsiniz. LocalCache\\Roaming Sürümler arasında stabil kalır.
# 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
Bu yaklaşımla, bir güncellemeden sonra erişimin çalışmasını sağlarsınız. her sürümde .lnk'e dokunmadan. Yol takma adı işaret ediyorsa (örneğin, %localappdata%\\Microsoft\\WindowsApps\\myapp.exe), yol hala geçerli olacaktır.
Hata yönetimi ve önerilen doğrulamalar
.lnk dosyasını oluşturmadan önce, aşağıdakilerin doğrulanması önerilir: TargetPath mevcut (%windir% veya takma adlar gibi değişkenler kullanmadığınız sürece). VBA/VB6'da, yürütülebilir dosya eksikse uyarı verebilir veya işlemi iptal edebilirsiniz; PowerShell'de, yolun erişilebilir olup olmadığını kontrol etmek için Test-Path'i kullanın.
Simge yolu bir .ico ağı, yararlı bir taktik onu kullanıcının temp veya APPDATA klasörüne kopyalamak ve oradan referans vermektir. Bozuk simgelerden böyle kaçınabilirsiniz ağ kaynağı mevcut değilse.
.url kısayollarını düzenlerken, kendi simgenize ihtiyacınız varsa, dosyayı metin olarak yeniden açın ve ekleyin IconFile ve IconIndex Sonunda. Bu, tarayıcıya güvenmeden görünümü üzerinde tam kontrol sahibi olmanızı sağlar.
COM'u sonlandırdığınızda, nesneleri serbest bırakın Serbest BırakComObject PowerShell'de veya VB/VBA'da Nothing atayın. Bu küçük bir ayrıntı, ancak kaynakların asılı kalmasını önlemeye yardımcı olur yoğun infazlarda.
Tipik arıza durumları ve bunların nasıl çözüleceği
SCCM tarafından yapılan bir dağıtım 0 koduyla sonlanıyorsa ancak erişim görünmüyorsa, öncelikle masaüstünün hedef kullanıcısıSYSTEM olarak çalıştırıyorsanız ve etkileşimli profile %USERPROFILE%\Desktop yazarsanız hiçbir şey göremezsiniz. Herkesin görebilmesi için C:\Users\Public\Desktop kullanın.
Intune'da, argümanlarla (örneğin, kodlanmış boşluklar içeren bir URL) Edge istemleri oluşturduğunuzda, şunu onaylayın: tırnak işaretleri iyi -ShortcutArguments'da ve metin bozulmadan gelir. Yerinde olmayan tek bir alan .lnk'in kaderini değiştirebilir.
Kurumsal kısayol klasörleri için (örneğin, "SharePoint Kısayolları"), önce klasörü doğru masaüstünde oluşturun ve Explorer'da vurgulamak istiyorsanız, Hızlı Erişim'e bağlantı Shell.Application'da gördüğümüz gibi.
Zaten oluşturulmuş .lnk dosyasını güncellenen bir MSIX paketinde dağıtırsanız, bunu WindowsApps içindeki sürüm kontrollü yola yönlendirmeyin. AppExecutionAlias'ı kullanın ve simgeyi sürümlü klasörden kopyalayın.
Değişkenler ve yollarla ilgili faydalı ipuçları
Taşınabilir betikler yazmak için şunlara güvenin: Ortam Değişkenleri: %windir%, %systemroot%, %ProgramFiles% ve benzerleri. WSH'de bunları şu şekilde genişletebilirsiniz: ÇevreDizelerini Genişletve PowerShell'de bunlara $env:VARIABLE aracılığıyla başvurabilirsiniz.
Dinamik rotalar oluştururken, çalışma klasörü \ ile bitiyor Çubukları çoğaltmaktan veya birleştirme sırasında TargetPath'i kırmaktan kaçınmak için. Bu, küçük bir koruma önlemidir. ince hatalardan kaçının üretimde.
Karmaşık parametreler gerektiren kısayollar için küçük bir .cmd veya .ps1 betiği yazmayı ve kısayolun ona işaret etmesini sağlamayı düşünebilirsiniz. .lnk'i bu şekilde basitleştirebilirsiniz ve alıntılama ve argüman sıralaması üzerinde daha iyi bir kontrole sahip olursunuz.
Kısayol tuşlarına ihtiyacınız varsa, kombinasyonları şu şekilde ayırmayı deneyin: önemli mektuplar ve yaygın kısayollarla çakışmaları önleyin. Çok sayıda uygulamanın bulunduğu ortamlarda, kullanıcının kısayolları belgeleyebilmesi için kısayolları belgelendirin. deneme yanılmadan yararlanmak.
Windows'ta kısayolları güvenilir ve esnek bir şekilde oluşturmak için çeşitli seçenekleriniz var. WSH ortak bir temeldirve bunun da ötesinde, büyük ölçekte tekrarlanabilir süreçler arıyorsanız, katmanları seçebilirsiniz: klasik betikler, modern PowerShell veya PSF ile MSIX paketleme. Önemli olan doğru yolu seçmek, yürütme bağlamını doğrulamak ve kırılgan, sürümlü yollara kilitlenmekten kaçınmaktır.
Genel olarak bayt ve teknoloji dünyası hakkında tutkulu bir yazar. Bilgilerimi yazarak paylaşmayı seviyorum ve bu blogda da bunu yapacağım; size gadget'lar, yazılım, donanım, teknolojik trendler ve daha fazlasıyla ilgili en ilginç şeyleri göstereceğim. Amacım dijital dünyada basit ve eğlenceli bir şekilde gezinmenize yardımcı olmaktır.