- يتيح لك WSH إنشاء اختصارات .lnk و.url من VBScript وVBA وVB6 وVFP و بوويرشيل مع كائن WScript.Shell.
- في عمليات نشر تكنولوجيا المعلومات، يقرر السياق (المستخدم مقابل النظام) ما إذا كان سيتم استخدام سطح مكتب عام أو خاص بالمستخدم.
- مع MSIX/PSF، يتجنب AppExecutionAlias المسارات المنسقة ويسهل الوصول المستمر.
- تتم التحكم في الأيقونات والحجج ومفاتيح الاختصار وأنماط النوافذ من خلال خصائص الاختصار.
إن إنشاء اختصارات ليس مجرد وسيلة مريحة: بل هو وسيلة لأتمتة المهام وتحسين إنتاجيتك اليومية. ويندوز. ويندوز سيناريو المضيف (WSH) إنه يوفر طريقة بسيطة وقوية لإنشاء روابط للتطبيقات والمستندات وعناوين الويب من لغات برمجة نصية متعددة.
في هذا الدليل العملي نجمع بين التقنيات المثبتة مع VBScript، PowerShell، Visual Basic، Visual FoxPro والسيناريوهات الحديثة مع الحزم MSIX وPSFالهدف هو تمكينك من اختيار النهج الذي يناسب بيئتك بشكل أفضل (المستخدم النهائي، أو تكنولوجيا المعلومات، أو 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 ولا توجد سياسات تمنع تنفيذ البرامج النصية. في بيئات الشركات، قد تؤثر إعدادات كائنات نهج المجموعة (GPOs) ومكافحة الفيروسات على VBScript أو PowerShell.
تجنب إرباك سطح المكتب الخاص بك بالاختصارات. إنشاء الوصول فقط عندما يضيف قيمة وإذا قمت بتوزيعها مركزيًا، حدد معيارًا واضحًا (على سبيل المثال، مجلدات العمل أو التطبيقات الشركات الحرجة).
إذا تم تشغيل البرنامج النصي كـ النظام أو في سياق الآلة (Intune/SCCM)، فكر جيدًا في المكان الذي تكتب فيه ملف .lnk: قد ترغب في استخدام سطح المكتب العام (C:\\Users\\Public\\Desktop) بدلاً من سطح مكتب المستخدم الحالي.
افحص ال مسار الوجهة والأذونات ومتغيرات البيئةأحد الأخطاء الشائعة هو الإشارة إلى المسارات ذات الإصدارات المتغيرة (ملفات البرامج\\WindowsApps) أو استخدام UNC دون الوصول من الحساب الذي يقوم بتشغيل البرنامج النصي.
المجلدات الخاصة وكيفية حل مساراتها
يقوم WSH بحل أسماء المجلدات الخاصة إلى مسارها الفعلي باستخدام WshShell.المجلدات الخاصةمن بين العناصر الأكثر فائدة هي سطح المكتب، وقائمة البدء، والبرامج، وبدء التشغيل، أو المفضلة، بالإضافة إلى المتغيرات الخاصة بها لجميع المستخدمين (AllUsersDesktop، وAllUsersStartMenu، وما إلى ذلك). وهذا يسمح لك بأن تكون مستقلاً اللغة والبنية الدقيقة للملف الشخصي.
إذا كنت تعمل باستخدام Visual Basic الكلاسيكي أو تريد الحصول على مسارات من واجهة برمجة التطبيقات، فيمكنك استخدام 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
مع مرئي FoxPro يمكنك أيضًا استخدام كائن WScript.Shell. الفكرة متطابقة: تحديد موقع سطح المكتب، وإنشاء ملف .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 (يمكنك تحديد الفهرس بعد الفاصلة). يتم التحكم في سلوك الفتح باستخدام .نمط النافذة:3 مكبرة، 7 مصغرة، 4 عادية.
إذا كنت تريد مجموعة مفاتيح، استخدم .مفتاح التشغيل السريع باستخدام نمط ALT+CTRL+Letter (على سبيل المثال، ALT+CTRL+N). يُسرّع هذا التعيين عملية الفتح، ولكن لا ينصح بتعيين عدد كبير جدًا حتى لا تتداخل مع اختصارات النظام.
اختصارات URL (.url)
بالإضافة إلى ملفات .lnk الخاصة بالتطبيق، يمكن لبرنامج 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
هذا النهج مثالي لـ روابط ل شير، تطبيقات الإنترنت أو الويب التي تريد تركها في متناول اليد على سطح مكتب المستخدم.
PowerShell لتكنولوجيا المعلومات: Intune وSCCM والنشر على نطاق واسع
يتضمن PowerShell إمكانية الوصول إلى نفس نموذج COM مثل WSH، حتى تتمكن من إنشاء الوصول وتوزيعه بشكل جماعي. الشيء المعتاد هو اكتشاف سطح المكتب الصحيح (مستخدم أو عام)، وإنشاء مجلدات الوجهة، وإذا لزم الأمر، تثبيت المسارات في الوصول السريع.
# 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
في التنفيذات مع في تناغميتيح لك هذا النمط إنشاء مجلد على سطح المكتب لديك وتمرير الوصول إلى Edge باستخدام معلمات مثل عنوان URL الخاص بـ SharePoint. إذا تم تشغيله كنظامسيكون سطح المكتب المستهدف هو سطح المكتب العام، والذي سيكون مرئيًا لجميع الملفات الشخصية.
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 (اعتمادًا على الهندسة المعمارية) وتفويض إنشاء الوصول إلى البرنامج النصي لبدء التشغيل المحدد في config.json باستخدام PSF. يتم تشغيل البرنامج النصي مرة واحدة عند التهيئة الأولى.
{
"applications": [
{
"id": "App",
"executable": "MiApp\\MiApp.exe",
"workingDirectory": "MiApp\\",
"startScript": {
"scriptPath": "createshortcut.ps1",
"runInVirtualEnvironment": false,
"waitForScriptToFinish": true,
"showWindow": false,
"runOnce": true
}
}
]
}
باورشيل إنشاء اختصار.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، يتم تحرير الكائنات ذات ReleaseComObject في PowerShell، أو لا تُعيِّن أي شيء في VB/VBA. إنها تفصيلة بسيطة، ولكن يساعد على تجنب تعليق الموارد في عمليات الإعدام المكثفة.
حالات الفشل النموذجية وكيفية حلها
إذا انتهى النشر بواسطة SCCM بالرمز 0 ولكن لم يظهر الوصول، فتحقق أولاً من المستخدم المستهدف لسطح المكتبإذا كنت تستخدم نظامًا وأدخلت %USERPROFILE%\Desktop في الملف الشخصي التفاعلي، فلن يظهر لك أي شيء. استخدم C:\Users\Public\Desktop لجعله مرئيًا للجميع.
في Intune، عند إنشاء مطالبات Edge باستخدام الوسائط (على سبيل المثال، عنوان URL يحتوي على مسافات مشفرة)، تأكد من ذلك علامات الاقتباس جيدة في -ShortcutArguments ويصل النص سليمًا. مساحة واحدة خارج مكانها يمكن أن يكسر مصير .lnk.
بالنسبة لمجلدات اختصارات الشركة (على سبيل المثال، "اختصارات SharePoint")، قم أولاً بإنشاء المجلد على سطح المكتب الصحيح، وإذا كنت تريد تمييزه في Explorer، مرساة للوصول السريع كما رأينا مع Shell.Application.
إذا قمت بتوزيع ملف .lnk المبني بالفعل في حزمة MSIX قيد التحديث، فلا توجهه إلى مسار الإصدار داخل WindowsApps. استخدم AppExecutionAlias ونسخ الرمز من المجلد المنسوخ.
حيل مفيدة مع المتغيرات والمسارات
لكتابة البرامج النصية المحمولة، اعتمد على متغيرات البيئة: %windir%، %systemroot%، %ProgramFiles% وما شابه. في WSH، يمكنك توسيعها باستخدام توسيع سلاسل البيئة، وفي PowerShell يمكنك الرجوع إليها عبر $env:VARIABLE.
عند إنشاء مسارات ديناميكية، تحقق مما إذا كان ينتهي مجلد العمل بـ \ لتجنب تكرار الأشرطة أو كسر مسار الهدف عند التجميع. إنه حاجز صغير تجنب الأخطاء الدقيقة في الانتاج.
بالنسبة للاختصارات التي تتطلب معلمات معقدة، فكر في كتابة نص برمجي صغير بصيغة .cmd أو .ps1 وجعل الاختصار يشير إليه. هذه هي الطريقة التي يمكنك بها تبسيط .lnk ويمكنك التحكم بشكل أفضل في الاقتباس وترتيب الحجج.
إذا كنت بحاجة إلى مفاتيح التشغيل السريع، فحاول حجز المجموعات باستخدام الحروف الهامة وتجنب الاصطدامات مع الاختصارات الشائعة. في البيئات التي تحتوي على العديد من التطبيقات، وثّق الاختصارات ليتمكن المستخدم من الاستفادة دون تجربة أو خطأ.
تتوفر لديك مجموعة من الخيارات لإنشاء اختصارات في Windows بطريقة موثوقة ومرنة. WSH هي القاعدة المشتركةبالإضافة إلى ذلك، يمكنك اختيار الطبقة المناسبة: النصوص البرمجية الكلاسيكية، أو PowerShell الحديث، أو حزمة MSIX مع PSF عند البحث عن عمليات قابلة للتكرار على نطاق واسع. يكمن السر في اختيار المسار الصحيح، والتحقق من سياق التنفيذ، وتجنب الوقوع في مسارات هشة ومُقيدة الإصدارات.
كاتب شغوف بعالم البايت والتكنولوجيا بشكل عام. أحب مشاركة معرفتي من خلال الكتابة، وهذا ما سأفعله في هذه المدونة، لأعرض لك كل الأشياء الأكثر إثارة للاهتمام حول الأدوات الذكية والبرامج والأجهزة والاتجاهات التكنولوجية والمزيد. هدفي هو مساعدتك على التنقل في العالم الرقمي بطريقة بسيطة ومسلية.