دليل مراجعة VBA والأدوات الداخليّة استعداداً لإيقاف VBScript
· آخر تحديث: · 小村 豪 · VBScript, VBA, Excel, PowerShell, Office, Windows, الاستفادة من الأصول القائمة
سجل التعديلات (3 تحديثات، آخر تحديث 3 Sep، 2026)
سجل بالتغييرات التي أُجريت على هذا المقال. وحيثما حُفظت نسخة سابقة، تبقى متاحة للقراءة عبر رابط دائم يحمل معرّف DOI.
- أُضيفت روابط الاستشارة الموجودة في الأصل الياباني (consultation_services). ولم يتغيّر نصّ المقالة نفسه. قراءة النسخة السابقة لهذا التحديث (DOI: 10.5281/zenodo.22240928)
- أُعيدَت الترجمة العربية كترجمة كاملة عن النص الياباني الأصلي، وأُضيفَت خريطة المعرفة.
- أعيدت الترجمة كترجمة كاملة عن النص الياباني الأصلي. كانت النسخة العربية السابقة مختصراً يسقط أبواباً وجداول ورسوم Mermaid وتعليقات الأشكال وFAQ. أُعيدت هذه العناصر وفق الأصل الياباني، والادّعاءات التقنية مطابقة للنسخة اليابانية.
- النشر الأول
الاستشهاد بهذا المقال(DOI: 10.5281/zenodo.21621515)
هذا المقال محفوظ على Zenodo. يرد أدناه معرّف DOI الذي يشير دائمًا إلى أحدث نسخة، ومعرّف DOI المثبَّت على النسخة التي تقرؤها.
小村 豪 (2026). دليل مراجعة VBA والأدوات الداخليّة استعداداً لإيقاف VBScript. شركة كومورا سوفت ذ.م.م.. https://doi.org/10.5281/zenodo.21621515 https://comcomponent.com/ar/blog/2026/04/25/001-vbscript-deprecation-vba-excel-macro-internal-tools-audit-guide/
- DOI (أحدث نسخة)
- 10.5281/zenodo.21621515
- DOI (هذه النسخة)
- 10.5281/zenodo.22279969
الملخّص التنفيذيّ
«الأدوات الداخليّة» في هذا المقال ليست وحدات Excel macro وملفّات .vbs وحدها. تشمل سكربتات تسجيل الدخول في GPO، والمهامّ المسجَّلة في جدولة المهامّ، والسكربتات الموزَّعة عبر Intune، و VBScript Custom Action في MSI. حتّى إن لم تتذكّر أنّك كتبت VBScript بنفسك، يكفي أن يكون .vbs مدفوناً في واحد من هذه ليكون ضمن النطاق.
حتّى أبريل 2026 نشرت Microsoft خطّة لإيقاف VBScript على مراحل، وفي Windows 11 الإصدار 24H2 يصبح أوّلاً Feature on Demand مفعَّلاً افتراضيّاً، ثمّ في المرحلة التالية معطَّلاً افتراضيّاً، وفي المرحلة الأخيرة يُحذَف من إصدارات Windows المستقبليّة. أي إنّ ما ينبغي فعله الآن قبل «إعادة الكتابة الكاملة» هو «إظهار أين يوجد اعتماد VBScript».
أمّا التوقيت فلم يُعلَن تاريخ حاسم. في إرشاد Microsoft الموجَّه إلى VBA، المرحلة 2 (تعطيل FOD افتراضيّاً) «نحو 2026 إلى 2027»، والمرحلة 3 (الحذف) «TBD (غير محدّد)». أي لا يمكن في هذا الملفّ اشتقاق «متى يجب الانتهاء» من تاريخ. كلّما زادت الأجهزة على Windows 11 24H2 فما بعده اقترب الأجل، ولذلك ينبغي إنجاز الجرد على الأقلّ مسبقاً.
النقطتان الواقعيّتان في VBA و Excel macro اثنتان أساساً. الأولى تشغيل .vbs خارجيّاً، والثانية مراجع مكتبات من نوع VBScript مثل VBScript.RegExp. في الثانية، اعتباراً من Office version 2508 (Build 19127.20154) أصبحت فئة RegExp مضمَّنة قياسياً في VBE، فصار جزء على الأقلّ من اعتماد RegExp أسهل ترحيلاً. في المقابل، في بيئة مختلطة تبقى فيها عملاء Office قديمة يسهل أن تعمل فيها VBA نفسها على جهاز ولا تعمل على آخر.
ما يصعّب الترحيل ليس VBScript نفسه بقدر «التشغيل المحيط». مثلاً حتّى إن استبدلت التشغيل من Excel بـ powershell.exe، إن اصطدمت بقواعد تقليل سطح الهجوم «حظر إنشاء عمليّة ابن من تطبيقات Office» و«حظر استدعاء Win32 API من وحدات Office macro»، أو بـ AppLocker، أو App Control for Business، أو سياسة تنفيذ PowerShell، أو تشغيل التوقيع، أو التحكّم في الوحدات على ملفّات عليها MOTW، فلن يعمل الأمر في الإنتاج. خطّة الترحيل ينبغي أن تُصمَّم لا كتحويل كود فقط، بل لتشمل السياسات والتوقيع وتدقيق السجلّات.
أقصر مسار هو الجرد ← الكشف الساكن ← جمع سجلّات التشغيل ← اختيار البديل ← الاختبار ← النشر المرحليّ. يرتّب هذا المقال الأمر بهذا التسلسل للاستخدام الميدانيّ.
علماً بأنّ الشيفرات الواردة هنا منشورة على GitHub كمجموعة عيّنات قابلة للتشغيل والاختبار (سكربت تدقيق PowerShell، وعيّنات استبدال، وكود مرجعيّ لـ VBA و Office Scripts، واختبارات Pester).
vbscript-deprecation-vba-excel-macro-internal-tools-audit-guide - komurasoft-blog-samples (GitHub)
في المخطّط، يشير الخطّ المتّصل إلى علاقة قائمة دائماً، ويشير الخطّ المتقطّع إلى علاقة مشروطة (شروط قيامها مذكورة في شرح كلّ علاقة في الصفحة التفصيليّة). القائمة الكاملة للعلاقات (المجموع 25، مع الأدلّة ودرجة اليقين) وتعريفات المفاهيم الرئيسة مجمّعة في صفحة تفاصيل خريطة المعرفة (باليابانية). البيانات: JSON-LD / Turtle
قاموس مصطلحات موجز
في الفصول التالية تتوالى اختصارات لميزات أمان Windows. ضبط هذه الفقرة أوّلاً يسهّل القراءة.
| الاختصار / المصطلح | الاسم الرسميّ | ماذا يفعل |
|---|---|---|
| FOD | Feature on Demand (ميزة عند الطلب) | حزمة ميزات اختياريّة في Windows. تُقدَّم لتُضاف إلى الأجهزة التي تحتاجها فقط، ومنها ما يكون مثبَّتاً افتراضيّاً ومنها ما لا يكون |
| ASR | Attack Surface Reduction (قواعد تقليل سطح الهجوم) | ميزة في Microsoft Defender. توقف سلوكاً سهل الاستغلال على مستوى القاعدة، مثل «حظر إنشاء عمليّة ابن من تطبيقات Office» |
| MOTW | Mark of the Web | علامة يضعها Windows على ملفّ قادم من الإنترنت أو البريد. يحظر Office افتراضيّاً تشغيل الوحدات على ملفّ يحمل هذه العلامة |
| App Control for Business | الاسم السابق Windows Defender Application Control (WDAC) | آليّة تعرّف بالكود المسموح تشغيله عبر سياسة. لا تقتصر على الملفّات التنفيذيّة بل تمتدّ إلى السكربتات و MSI |
| AppLocker | ─ | آليّة تسمح أو ترفض الملفّات التنفيذيّة والسكربتات والمثبِّتات بقواعد. في وضع التدقيق يمكن جمع سجلّات «ما كان سيتوقّف في الإنتاج» فقط |
| VBE | Visual Basic Editor | بيئة تحرير VBA المضمَّنة في Office. اعتباراً من Office 2508 تتضمّن فئة RegExp قياسيّاً |
تنظيم ما يتغيّر
أوّل ما ينبغي ضبطه أنّ موضوع هذه المرّة ليس «إيقاف VBA». ما نشرته Microsoft هو الإيقاف التدريجيّ لـ VBScript، وأثره على مشاريع VBA يتركّز أساساً في تشغيل .vbs الخارجيّ و مراجع مكتبات VBScript. حتّى مدوّنة Microsoft 365 Developer ترتّب تشغيل .vbs من VBA واستخدام VBScript.RegExp كنقطتي أثر نموذجيّتين.
في الميدان يسهل الحكم إن رُتِّبت الأولويّة بهذا الجدول.
| نمط الاعتماد | ماذا يحدث | الأولويّة |
|---|---|---|
تشغيل .vbs مباشرة من VBA/Excel |
بعد المرحلة 2 يفشل حسب تكوين الجهاز، وفي المرحلة 3 يتوقّف مبدئيّاً | عالية |
مرجع VBScript.RegExp |
يسهل أن يتعطّل في بيئة مختلطة يبقى فيها ما دون Office 2508 | عالية |
تشغيل عمليّة خارجيّة عبر WScript.Shell / Shell |
بعد الاستبدال قد يتوقّف أيضاً بسبب ASR أو AppLocker | عالية |
| سكربتات تسجيل الدخول/بدء التشغيل/إيقاف التشغيل في GPO، و Scheduled Task، وسكربتات توزيع Intune | يسهل أن تتعطّل دفعة واحدة عند تحديث نظام التشغيل أو تبديل السياسة | عالية |
| VBScript Custom Action في MSI | يفشل فجأة عند التثبيت أو الإصلاح أو إلغاء التثبيت | عالية |
هذه الأولويّة حكم ميدانيّ يستند إلى خطّة إيقاف VBScript على جانب Windows، واستراتيجيّة الكشف الرسميّة، ومواصفات ASR/AppLocker/App Control.
RegExp وحده مختلف قليلاً. اعتباراً من Office version 2508 تتضمّن جهة VBE فئة RegExp قياسيّاً، فصار ممكناً في غرض RegExp وحده «حلّ جزء من اعتماد VBScript بتحديث Office». غير أنّ هذا لا يُحلّ تلقائيّاً في بيئة Office قديمة، أو قناة تحديث بطيئة، أو بيئة مختلطة، أو صورة جهاز قديمة باقية في المؤسّسة. المهمّ إدخال «تحديث Office» و«تبديل مرحلة Windows» كليهما في السجلّ.
كيفيّة إجراء الجرد
الجرد لا يكفي فيه البحث باسم الملفّ. نوصي على الأقلّ بأن تحمل الأعمدة التالية على مستوى القضيّة والأداة والعمل.
- ① طريقة كشف مواضع اعتماد VBScript سجّل بحث الملفّات وتحليل الكود وتحليل السجلّات كلّاً على حدة.
- ② استخدام
CreateObject/GetObject/Execute/ExecuteGlobalونحوها داخل VBA جهة الاعتماد تختبئ في سلسلة، فيسهل تسرّب البحث الساكن. - ③ استدعاء سكربت خارجيّ من Excel macro
افصل
WScript.Shell، ودالّةShell، وwscript.exe/cscript.exe، و.vbs/.js/.ps1. - ④ اعتماد السكربت في الدفعات والأدوات الداخليّة أدخل Scheduled Task و GPO و Intune وسكربتات التشغيل على مجلّد مشترك والمثبِّتات.
- ⑤ الأمان والصلاحيّات والتوقيع والسياسات AppLocker، App Control for Business، ASR، سياسة تنفيذ PowerShell، التوقيع الرقميّ، ولزوم امتيازات المدير من عدمه.
- ⑥ مقارنة التقنية البديلة وتكلفة الترحيل قارن VBA الأصليّ و PowerShell و .NET/VSTO و Office Scripts و Power Automate.
- ⑦ خطّة الاختبار افصل الوحدة والتكامل وقبول المستخدم وإعادة الاختبار بعد تطبيق السياسة.
- ⑧ إجراءات التشغيل والتراجع اذكر صراحة ما الذي يُعاد ليعود العمل، وإلى أيّ حدّ تُؤتمت.
- ⑨ التوافق والأداء فروق إصدارات Office، 32/64bit، أداء الجهاز، حمل جمع السجلّات، مهلة تدفّق السحابة.
- ⑩ دراسة حالة ترحيل عيّنة أعدّ مثالاً تمثيليّاً يصلح للشرح في الميدان.
من بين هذه البنود العشرة، GPO و Scheduled Task وسكربتات توزيع Intune و MSI Custom Action والكشف عبر Sysmon/AppLocker/App Control مجالات تركّز مصرَّح بها أيضاً في الإرشاد الرسميّ من Microsoft.
مسار الترحيل ككلّ لا ينحرف إن فُكِّر فيه كما في الشكل.
flowchart TD
A[جرد الأصول] --> B{نوع الاعتماد}
B -->|تشغيل .vbs خارجيّ| C[الاستبدال بـ PowerShell أو VBA الأصليّ]
B -->|VBScript.RegExp| D[الترتيب نحو RegExp المضمَّن في Office 2508+]
B -->|GPO / المهامّ / MSI| E[تصحيح إعدادات الإدارة المركزيّة والموادّ الموزَّعة]
B -->|اعتماد مجهول أو مدفون| F[جمع سجلّات التشغيل عبر Sysmon / AppLocker / App Control]
C --> G[اختبار الوحدة]
D --> G
E --> H[اختبار التكامل]
F --> H
H --> I[نشر تجريبيّ في وضع التدقيق]
I --> J[تعطيل VBScript FOD تدريجيّاً]
لبيئة لا يظهر فيها الشكل، نلخّص في ثلاثة أسطر.
- صنِّف الاعتماد الذي وجده الجرد إلى أربعة: تشغيل
.vbsخارجيّ /VBScript.RegExp/ إعدادات إدارة مركزيّة (GPO والمهامّ و MSI) / مجهول - حدّد جهة الاستبدال لكلّ صنف وأمرّ اختبار الوحدة، ثمّ التحم في اختبار التكامل
- انشر تجريبيّاً في وضع التدقيق، وإن لم تظهر مشكلة عطِّل VBScript FOD تدريجيّاً
بهذا الترتيب ينخفض كثيراً الإعادة النموذجيّة: «أعيدت الكتابة أوّلاً ثمّ سقطت لاحقاً بسبب GPO أو ASR».
الكشف العمليّ وأمثلة الكود
البحث في الملفّات وتجميع معلومات التهيئة
في إرشاد الكشف لدى Microsoft يُوصى بالبحث التكراريّ عن .vbs مع إعطاء أولويّة لمسارات واضحة الغرض مثل C:\Users و C:\ProgramData و C:\Scripts، والتحقّق من GPO و Scheduled Task وسكربتات توزيع Intune وحزم MSI في مسارات منفصلة. مراقبة vbscript.dll عبر Sysmon مفيدة، لكن مراقبة Image Load تزيد كمّيّة السجلّات وحمل التشغيل، فينبغي التحقّق أوّلاً بتجربة صغيرة.
# 端末・共有フォルダ上のスクリプト依存をざっくり洗う
$paths = @("C:\Users", "C:\ProgramData", "C:\Scripts")
$patterns = @(
'wscript\.exe',
'cscript\.exe',
'\.vbs(\s|$)',
'VBScript\.RegExp',
'WScript\.Shell',
'CreateObject\("VBScript\.RegExp"\)',
'ExecuteGlobal'
)
$hits = foreach ($path in $paths) {
if (Test-Path $path) {
Get-ChildItem -Path $path -Recurse -File `
-Include *.vbs,*.ps1,*.bat,*.cmd,*.wsf,*.hta,*.txt `
-ErrorAction SilentlyContinue |
Select-String -Pattern $patterns -AllMatches |
Select-Object Path, LineNumber, Line
}
}
$hits | Export-Csv .\vbscript-dependency-hits.csv -NoTypeInformation -Encoding UTF8
بعد ذلك اغسل جدولة المهامّ. في الأدوات الداخليّة كثيراً ما يكون wscript.exe / cscript.exe / .vbs مدفوناً في تعريف المهمّة أكثر منه في الملفّ.
# Scheduled Task から VBScript 呼び出しを抽出
Get-ScheduledTask | ForEach-Object {
foreach ($a in $_.Actions) {
if ($a.Execute -match 'wscript|cscript|mshta' -or $a.Arguments -match '\.vbs\b') {
[pscustomobject]@{
TaskName = $_.TaskName
TaskPath = $_.TaskPath
Execute = $a.Execute
Arguments = $a.Arguments
}
}
}
} | Export-Csv .\task-vbscript-dependencies.csv -NoTypeInformation -Encoding UTF8
تحليل كود VBA
على جانب VBA، النظر إلى مراجع المشروع وحدها لا يكفي. CreateObject و GetObject يستطيعان تشغيل COM بسلسلة، فقد يكون الاعتماد قائماً دون أن يظهر شيء في المراجع. حتّى وثائق Microsoft لـ VBA/Office تشرح CreateObject كوسيلة أساسيّة لإنشاء كائن COM، ويُستخدَم FileSystemObject و Scripting.Dictionary بهذا الشكل أيضاً. كذلك، لقراءة مشروع VBA برمجيّاً يلزم «الوثوق بالوصول إلى نموذج كائن مشروع VBA».
' 前提:
' - [トラスト センター] の「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」を有効化
' - 保護されたプロジェクトは別途ソース輸出や担当者確認が必要
Sub ScanProjectForVbScriptRisks()
Dim comp As Object
Dim cm As Object
Dim ws As Worksheet
Dim nextRow As Long
Dim patterns As Variant
Dim p As Variant
Dim i As Long
Dim lineText As String
patterns = Array( _
"CreateObject(""VBScript.RegExp"")", _
"VBScript.RegExp", _
"WScript.Shell", _
"Shell(", _
".vbs", _
"wscript.exe", _
"cscript.exe", _
"ExecuteGlobal", _
"Execute(" _
)
Set ws = ThisWorkbook.Worksheets.Add
ws.Range("A1:D1").Value = Array("Module", "Line", "Pattern", "Code")
nextRow = 2
For Each comp In ThisWorkbook.VBProject.VBComponents
Set cm = comp.CodeModule
For i = 1 To cm.CountOfLines
lineText = cm.Lines(i, 1)
For Each p In patterns
If InStr(1, lineText, CStr(p), vbTextCompare) > 0 Then
ws.Cells(nextRow, 1).Value = comp.Name
ws.Cells(nextRow, 2).Value = i
ws.Cells(nextRow, 3).Value = p
ws.Cells(nextRow, 4).Value = lineText
nextRow = nextRow + 1
End If
Next p
Next i
Next comp
ws.Columns.AutoFit
MsgBox "Scan finished: " & (nextRow - 2) & " hits"
End Sub
هذا المسح يلتقط على الأقلّ CreateObject("VBScript.RegExp") و WScript.Shell و Shell( و .vbs و ExecuteGlobal. خصوصاً تنفيذ السلاسل مثل Execute / ExecuteGlobal يُركَّب فيه جهة الاعتماد وكود التشغيل ديناميكيّاً، فهو مرتع لتسرّب الجرد.
تحليل السجلّات
في مرحلة النظر إلى سجلّات التشغيل، الجمع بين Sysmon و AppLocker/App Control قويّ. في Sysmon يمكن تتبّع تحميل vbscript.dll عبر Event ID 7، وفي AppLocker تُراجَع أحداث السماح والتدقيق للسكربتات/MSI في Event Viewer. إن شُغِّل App Control for Business في وضع التدقيق، تُسجَّل السكربتات و MSI في سجلّ AppLocker\MSI and Script.
# Sysmon: vbscript.dll を読み込んだプロセスを確認
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -MaxEvents 2000 |
Where-Object { $_.Id -eq 7 -and $_.Message -match 'vbscript\.dll' } |
Select-Object TimeCreated, MachineName, Message
# AppLocker / App Control: スクリプト・MSI 関連の監査ログを確認
Get-WinEvent -LogName "Microsoft-Windows-AppLocker/MSI and Script" -MaxEvents 2000 |
Where-Object { $_.Id -in 8005, 8006 } |
Select-Object TimeCreated, Id, Message
المهمّ هنا جمع سجلّات «كان سيتوقّف في التدقيق» لا سجلّات «يعمل» وحدها. أحداث تدقيق AppLocker ووضع التدقيق في App Control مناسبان للتأكيد الآمن قبل الحظر في الإنتاج.
عيّنة استبدال صغرى
إن كانت المعالجة بقدر استدعاء .vbs خارجيّ لكتابة CSV، فأقصر طريق هو الاستبدال أوّلاً بـ VBA الأصليّ.
Sub ExportCsvNativeVba()
Dim f As Integer
Dim outPath As String
outPath = ThisWorkbook.Path & "\out.csv"
f = FreeFile
Open outPath For Output As #f
Print #f, "Code,Name"
Print #f, "1001,Tokyo"
Print #f, "1002,Osaka"
Close #f
MsgBox "CSV exported: " & outPath
End Sub
إن لزم استدعاء معالجة خارجيّة من Excel، وشملت نظام التشغيل أو مجلّداً مشتركاً أو AD أو المثبِّتات أو جمع السجلّات، فالأوقع الميل إلى PowerShell. توصي Microsoft بـ PowerShell بديلاً عن VBScript، وعلى جانب PowerShell وسائل تشغيل رسميّة لسياسة التنفيذ والتوقيع والتحقّق من Authenticode. علماً بأنّ Shell في VBA غير متزامن افتراضيّاً، فإن لزم التحكّم في الترتيب ينبغي التفكير في تصميم التدفّق أو معالجة انتظار على حدة.
Sub RunModernPs()
Dim cmd As String
cmd = "powershell.exe -NoProfile -File """ & ThisWorkbook.Path & "\Normalize.ps1""" & _
" -InputFile """ & ThisWorkbook.Path & "\in.csv""" & _
" -OutputFile """ & ThisWorkbook.Path & "\out.csv"""
Shell cmd, vbNormalFocus
End Sub
param(
[string]$InputFile,
[string]$OutputFile
)
Import-Csv $InputFile |
Sort-Object Code |
Export-Csv $OutputFile -NoTypeInformation -Encoding UTF8
# 署名の付与と確認
$cert = Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert | Select-Object -First 1
Set-AuthenticodeSignature -FilePath .\Normalize.ps1 -Certificate $cert
Get-AuthenticodeSignature -FilePath .\Normalize.ps1
إن اكتملت معالجة Excel بتنسيق وتجميع وتحويل داخل المصنّف وحده، فإنّ Office Scripts خيار قويّ أيضاً. Office Scripts موجَّه إلى Excel، ومناسب للتنفيذ السحابيّ وعبر المنصّات ولربط Power Automate.
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getActiveWorksheet();
const used = sheet.getUsedRange();
used.getFormat().autofitColumns();
const tables = workbook.getTables();
if (tables.length > 0) {
tables[0].getSort().apply([{ key: 0, ascending: true }], true);
}
}
اختيار التقنية البديلة
البديل ينبغي أن يُختار لا بـ «بماذا يمكن الكتابة» بل بـ مدى المسؤوليّة التي تُحمَّل إليه. PowerShell أميل إلى Windows والملفّات والمهامّ والمثبِّتات، و VBA الأصليّ أميل إلى داخل Office، و Office Scripts أميل إلى معالجة مصنّف Excel، و VSTO/.NET أميل إلى تكامل مكتبيّ كثيف، و Power Automate أميل إلى التنسيق. الجدول التالي تقدير ميدانيّ أساسه خصائص كلّ أسلوب المنشورة رسميّاً. الجهد تقدير من الكاتب.
اقرأ مقياس الجهد بوصفه تقديراً لترحيل أداة واحدة (وحدة macro واحدة أو سكربت واحد): منخفض = أيّام، متوسّط = أسابيع، مرتفع = شهر إلى أشهر. إن كان المستهدف 10 أدوات يتراكم الجهد بقدر ذلك.
| البديل | المعالجة المناسبة | أبرز المزايا | أبرز القيود | تقدير الجهد | الأولويّة |
|---|---|---|---|---|---|
| VBA الأصليّ | عمليّات الخلايا، التقارير، إخراج ملفّ بسيط، تعديل خفيف لوحدة قائمة | يسهل استثمار الأصل القائم، وتكلفة تعليم المستخدمين منخفضة | التحكّم في تشغيل نظام التشغيل والتوقيع والتوزيع ضعيف، واعتماد العمليّة الخارجيّة يبقى سهلاً | منخفض | عالية |
| PowerShell | عمليّات الملفّات، المجلّدات المشتركة، AD، المهامّ، المثبِّتات، أتمتة التشغيل | جهة الاستبدال التي توصي بها Microsoft، ويمكن تشغيل التوقيع وسياسة التنفيذ | يلزم ضبط سياسة التنفيذ والتوقيع و ASR و AppLocker | متوسّط | عالية |
| .NET / VSTO | منطق عمل معقّد، إضافات داخليّة طويلة العمر، تكامل واجهة كثيف | تكامل Office كثيف، ويمكن تقديم الوظيفة على مستوى التطبيق | يفترض Windows، ويلزم وقت تشغيل VSTO وتصميم توزيع | مرتفع | متوسّطة |
| Office Scripts | تنسيق نمطيّ داخل مصنّف Excel، تنفيذ سحابيّ، ربط Power Automate | عبر المنصّات، سهل المشاركة، سهل الترتيب إن كان المحور Excel | مخصّص لـ Excel، غير مناسب لمعالجة نظام تشغيل خارجيّة، وله قيود على البيانات الضخمة | متوسّط | متوسّطة |
| Power Automate | تنفيذ مجدول، موافقة، انطلاق عند وصول ملفّ، ربط خدمات أخرى | يسهل تصوّر التدفّق ككلّ، ويمكن إدماج PowerShell/.NET أيضاً | تصميم التشغيل ينقسم بين سطح المكتب والسحابة، ويلزم تصميم الصلاحيّات | متوسّط إلى مرتفع | متوسّطة |
إن رُسم معيار الاختيار بمزيد من الحدس يصبح كالتالي.
flowchart TD
A[اعتماد VBScript الذي وُجد] --> B{هل يكتمل داخل مصنّف Excel}
B -->|نعم| C[VBA الأصليّ]
B -->|نعم ومع أهمّيّة المشاركة/السحابة| D[Office Scripts]
B -->|لا| E{هل يلمس نظام التشغيل أو الملفّات أو المهامّ أو AD}
E -->|نعم| F[PowerShell]
E -->|لا| G{هل هو تكامل واجهة كثيف أو إضافة طويلة العمر}
G -->|نعم| H[.NET / VSTO]
G -->|انطلاق تدفّق أو محور موافقة| I[Power Automate]
في ثلاثة أسطر أيضاً يصبح كالتالي.
- إن اكتمل داخل مصنّف Excel فـ VBA الأصليّ. إن كانت المشاركة أو التنفيذ السحابيّ أهمّ فـ Office Scripts
- إن لامس نظام التشغيل أو الملفّات أو المهامّ أو AD فـ PowerShell
- إن كان تكامل واجهة كثيفاً أو إضافة طويلة العمر فـ .NET / VSTO. إن كان انطلاق تدفّق أو محور موافقة فـ Power Automate
نضيف عن RegExp وحده أنّه إن كانت البيئة محصورة في Office version 2508 فما بعده، فإنّ الترتيب نحو Dim re As RegExp / Set re = New RegExp فعّال جدّاً. لكن إن بقي جهاز Office قديم واحد تصطدم تلك الشيفرة بجدار توافق الترجمة. في بيئة مختلطة ينبغي حسم سياسة الترحيل مسبقاً بين «صياغة جديدة» و«صياغة قديمة» و«غلاف يتفرّع».
الاختبار والتشغيل
خطّة الاختبار
ترحيل VBScript لا يكفي فيه اختبار الوحدة. إن لم تُعَد التجربة في شروط تعادل الإنتاج مع سياسات الأمان مفعَّلة، يتوقّف سكربت PowerShell أو .NET بعد الاستبدال لسبب آخر. حتّى مواد Microsoft تعامل سياسة تنفيذ PowerShell و AppLocker ووضع تدقيق App Control و ASR والتحكّم في الوحدات على ملفّات عليها MOTW كقواعد منفصلة.
| المستوى | ما يُنظَر إليه | مثال شرط القبول |
|---|---|---|
| اختبار الوحدة | الإدخال والإخراج، معالجة الاستثناء، ترميز الأحرف، نتيجة التعبير النمطيّ | يعيد النتيجة نفسها التي كانت للمعالجة القديمة |
| اختبار التكامل | Excel⇔PowerShell، المجلّد المشترك، المهامّ، AD، إخراج التقرير | تكتمل الدفعة ككلّ بلا خطأ |
| اختبار الأمان | التوقيع، سياسة التنفيذ، AppLocker، App Control، ASR، MOTW | بعد تطبيق السياسة يعمل/يُدقَّق كما هو متوقّع |
| اختبار القبول | خطوات التشغيل، الزمن المستغرق، الرسالة عند الخطأ | تُبسَّط إجراءات الميدان أو تُحفَظ |
| اختبار التوافق والأداء | فروق إصدارات Office، البيانات الكبيرة، حمل جمع السجلّات | يستقرّ ضمن أداء مقبول حتّى على أجهزة مختلطة |
ما يسهل إغفاله خصوصاً هو التالي.
- استبدال التشغيل من Excel بـ PowerShell قد يصطدم بـ «حظر إنشاء عمليّة ابن من تطبيقات Office» في ASR.
- إن بقيت تصريحات VBA أو استدعاءات API، قد تصطدم بـ «حظر استدعاء Win32 API من وحدات Office macro» في ASR.
- ملفّات
.xlsm/.ps1الاختباريّة الموزَّعة من تنزيل أو مرفق بريد يتغيّر سلوكها حسب MOTW وحالة التوقيع. - الجمع بين Office Scripts و Power Automate مريح، لكن مع CSV كبير أو خلايا كثيرة يلزم الوعي بالمهلة وحدود نقل البيانات.
- مراقبة Image Load في Sysmon مفيدة، لكن توسيعها بلا عناية على الشركة كلّها يزيد كمّيّة السجلّات بسهولة.
قائمة التحقّق لإجراءات الترحيل
- أُجري بحث ساكن عن
.vbsوwscript.exeوcscript.exeوVBScript.RegExpوWScript.ShellوShell(وExecuteGlobal - أُجري جرد منفصل لـ GPO و Scheduled Task و Intune وتشغيل المجلّد المشترك و MSI
- قُيِّدت إصدارات Office وقنوات التحديث في سجلّ، وعُرف ما تبقّى دون 2508
- حُسمت جهة الاستبدال بين «VBA الأصليّ / PowerShell / .NET / Office Scripts / Power Automate»
- حُسمت سياسة التوقيع وسياسة توزيع الشهادات
- اختُبر أثر AppLocker / App Control / ASR / سياسة التنفيذ
- جُمعت سجلّات التدقيق في قسم تجريبيّ
- وُثِّقت إجراءات التراجع
- أُبقي دليل «غير مستخدَم» قبل تعطيل VBScript FOD
المخاطر والإجراءات المضادّة
| الخطر | العَرَض النمطيّ | الإجراء |
|---|---|---|
| يبقى اعتماد خفيّ | تفشل معالجة أوّل الشهر في قسم واحد فقط | بالإضافة إلى البحث الساكن، اجمع تدقيق Sysmon/AppLocker/App Control |
| تتوقّف جهة الاستبدال بسبب سياسة أمان | صار PowerShell لكنّه لا يعمل من منطلق Excel | ابدأ ASR و AppLocker و App Control بوضع التدقيق في بيئة اختبار |
| يفشل الإنتاج وحده بسبب نقص التوقيع | يعمل على جهاز المطوّر ويُرفَض على جهاز المستخدم | ثبّت تشغيل التوقيع بـ Set-AuthenticodeSignature و Get-AuthenticodeSignature |
| ينكسر RegExp في Office مختلط | خطأ ترجمة على بعض الأجهزة | قيّد ما تبقّى دون 2508 في سجلّ، وقدِّم غلافاً أو التحديث |
| يثقل Office Scripts / Flow | مهلة على CSV كبير | صمّم تقسيم الملفّات والدفعات ونقاط المزامنة |
إجراءات هذا الجدول إسقاط لقيود التصميم الواردة في الموادّ الرسميّة من Microsoft على التشغيل الداخليّ.
التراجع لا يكفي فيه «إعادة الكود». فكِّر على الأقلّ كمجموعة في استعادة النسخة القديمة من الموادّ الموزَّعة، وإعادة السياسة، وفسحة إعادة تفعيل الميزة الاختياريّة، واستمرار جمع السجلّات. ما دام VBScript موجوداً كـ FOD تبقى فسحة إعادة تفعيله كميزة اختياريّة وفق إرشاد المرحلة 2، لكن بعد الحذف في المرحلة 3 تزول هذه الفسحة.
دراسة حالة ترحيل عيّنة
كمثال نمطيّ نفترض وحدة تجميع شهريّ في قسم المحاسبة. الوضع الحاليّ أنّ Excel macro يشغّل cleanup.vbs عبر WScript.Shell، وبعد تنسيق CSV يتحقّق من الرمز بـ VBScript.RegExp، وأخيراً يخرج إلى مجلّد مشترك. هذا التكوين يتلقّى ضربة إيقاف VBScript مباشرة، ويسهل أن يتوقّف مرّة أخرى بعد استبدال بسيط بـ PowerShell بسبب ASR أو تشغيل التوقيع.
بلا إحساس بالحجم يصعب وضعه في طلب موافقة، فنضع أيضاً أرقاماً افتراضيّة للشرح. القيمة الفعليّة تُحسَم بنتيجة الجرد، لكن إن أُعيدت الكتابة بهذه الدقّة صارت أرضيّة لجدول الخطّة كما هي.
| البند | افتراض للشرح |
|---|---|
| المصنّفات المستهدفة | 3 مصنّفات (تجميع شهريّ، تجميع حسب القسم، قائمة المدفوعات) |
| وحدات VBA | 12 وحدة. منها 4 تعتمد على VBScript |
.vbs خارجيّ |
2 (تنسيق CSV، الوضع في المجلّد المشترك) |
| Scheduled Task | 1 (تشغيل في اليوم الأوّل من الشهر الساعة 6:00) |
| القسم والأجهزة | 6 أشخاص في المحاسبة، 6 أجهزة. إصدار Office دون 2508 على جهازين |
| الجهد المتوقّع | جرد 3 أيّام عمل / استبدال 10 / اختبار 5 / نشر 2 |
| المدّة المتوقّعة | من البدء إلى التبديل في الإنتاج شهران إلى ثلاثة. تشمل فترة دورة شهريّة تُدار على فراغ للمقارنة |
المدّة أطول من الجهد لأنّ المعالجة شهريّة. حتّى إن انتهى اختبار الوحدة في يوم، «هل تصير النتيجة كالشهر الماضي» لا يُؤكَّد دون عبور نهاية شهر مرّة. إن شملت الأداة معالجة سنويّة امتدّ زمن الانتظار أكثر. في الخطّة ارجع من توقيت يمكن فيه التأكيد لا من الجهد.
في هذه الحالة الصواب هو التقسيم. التحقّق والتنسيق والتجميع الذي يكتمل داخل Excel يُمال به إلى VBA الأصليّ أو RegExp المضمَّن في Office 2508+. تحويل الملفّات والإدخال والإخراج إلى المجلّد المشترك يُمال به إلى PowerShell. إن كان منطلق التشغيل «وصول ملفّ» أو «ميعاد يوميّ» يُمال به إلى Power Automate. بهذا تُرتَّب المسؤوليّات التي كانت محشورة في .vbs واحد.
مثال التكوين بعد الترحيل كالتالي.
- Excel macro: فحص الإدخال، تشغيل الشاشة، رسائل موجَّهة إلى المستخدم
- PowerShell: تطبيع CSV، إدخال/إخراج المجلّد المشترك، إخراج السجلّ
- تشغيل التوقيع: توقيع Authenticode على سكربت PowerShell
- الأمان: تأكيد مسبق لـ AppLocker/App Control في وضع التدقيق، والحكم على لزوم استثناء ASR
- التوسّع لاحقاً: ترحيل مرحليّ للمعالجة النمطيّة داخل Excel إلى Office Scripts
ميزة هذا الأسلوب أنّك تفصل اعتماد وقت تشغيل VBScript مبكّراً دون إعادة بناء كلّ شيء دفعة واحدة. إن امتصّ تحديث Office الـ RegExp، ومالت سكربتات التشغيل إلى PowerShell، وتدفّق العمل إلى Power Automate، أي إن قُسِّم حسب المسؤوليّة، ضاق أيضاً نطاق العطل.
الأدوات الموصى بها وروابط مرجعيّة
- مجموعة عيّنات الكود لهذا المقال (سكربت تدقيق PowerShell واختبارات Pester) https://github.com/gomurin0428/komurasoft-blog-samples/tree/main/vbscript-deprecation-vba-excel-macro-internal-tools-audit-guide
الموادّ الرسميّة يُستحسن قراءتها بهذا الترتيب.
- VBScript deprecation: Timelines and next steps نقطة انطلاق لتأكيد خارطة الطريق ككلّ ومعنى كلّ مرحلة.
- VBScript deprecation: Detection strategies for Windows إرشاد كشف عمليّ يشمل Sysmon و GPO و Scheduled Task و Intune و MSI Custom Action.
- Prepare your VBA projects for VBScript deprecation in Windows الأهمّ من زاوية VBA. يرتّب تضمين RegExp، ومعاملة Office 2508 فما بعده، وجدول التوافق.
- الفرق بين Office Scripts ووحدات VBA macro مادّة يسهل بها الحكم هل ينبغي إمالة المعالجة المتمحورة حول Excel إلى Office Scripts.
- about_Execution_Policies / about_Signing / Set-AuthenticodeSignature / Get-AuthenticodeSignature المجموعة الأساسيّة لتشغيل التوقيع وسياسة التنفيذ عند الترحيل إلى PowerShell.
- Using Event Viewer with AppLocker / Use audit events to create App Control policy rules / فرض السكربتات عبر App Control for Business لازمة لفهم تصميم وضع التدقيق وجمع الأحداث وسلوك فرض السكربتات.
- مرجع قواعد تقليل سطح الهجوم مادّة لتأكيد قواعد حظر عمليّة ابن من Office، و Win32 API، وتشغيل تنزيل JS/VBS.
- الوحدات القادمة من الإنترنت تُحظَر افتراضيّاً في Office قراءة لازمة لفهم مشكلة MOTW عند التوزيع الاختباريّ والنشر في الإنتاج.
كأدوات مساعدة يُستخدَم في الميدان غالباً التالي.
- Sysmon
الأساس لمراقبة تحميل
vbscript.dllوجمع أحداث العمليّات. - قوالب إعداد Sysmon على GitHub
sysmon-configمن SwiftOnSecurity قالب أوّليّ عالي الجودة، وsysmon-modularمن Olaf Hartong نقطة انطلاق نمطيّة سهلة التشغيل. - oletools / olevba مناسبة كمساعدة لاستخراج مصدر VBA من ملفّات Office وكشف الكلمات المريبة والوحدات ذات التشغيل التلقائيّ.
خلاصة الأمر أنّ الاستعداد لإيقاف VBScript لا يكفي فيه «البحث عن VBScript واستبداله بـ PowerShell». إدارة تحديث Office وتحليل الكود وتكوين التشغيل والتوقيع و ASR/AppLocker/App Control و UAT في سجلّ واحد هو أقصر مسار موثوق. أنقذ مبكّراً المجال الذي ينقذه تحديث Office مثل RegExp، وافصل بأولويّة المجال الذي ينهار بسهولة عند تبديل مرحلة Windows مثل تشغيل .vbs واعتماد GPO/المهامّ/MSI.
مقالات ذات صلة
أحدث المقالات التي تشترك في نفس الوسوم. عمّق فهمك بمواضيع مرتبطة.
ترحيل ماكرو Excel VBA إلى Power Automate ── النطاق الذي يُستبدل بـ Office Scripts، والنطاق الذي يبقى على VBA
نرتب إمكانية ترحيل ماكرو Excel VBA إلى Power Automate. نشرح النطاق الذي يمكن استبداله بـ Office Scripts، وما لا يُنجز إلا عبر VBA، والقيم...
أتمتة الأعمال باستخدام Power Automate ── الفصل بين التدفّق السحابي وتدفّق سطح المكتب وتصميم معالجة الأخطاء
نستعرض الفرق بين التدفّق السحابي وتدفّق سطح المكتب في Power Automate، والفصل بينهما وبين PowerShell/VBA، والرخص، ومعالجة الأخطاء، وتثبيت ...
طريقة تشغيل PowerShell من C# (CSharp) واستقبال النتيجة ككائن
نرتّب من منظور عمليّ طريقة تشغيل PowerShell من C# واستقبال النتيجة ككائن PSObject بدل نصّ، بدءًا من PowerShell SDK وAddCommand وAddParame...
تهيئة اختبارات PowerShell عبر Pester ── الأسلوب العمليّ لجعل سكربتات التشغيل أقلّ عرضةً للكسر
نُنظِّم الإجراءات العمليّة لاختبار سكربتات PowerShell عبر Pester v5، بدءاً من معالجة التواريخ وعمليّات الملفّات وعمليّات الحذف، مروراً با...
مجموعة أوامر PowerShell العمليّة ── إضافة وظائف صغيرة شائعة الاستخدام في العمل اليوميّ
نرتّب هنا أوامر PowerShell العمليّة المستخدَمة في العمل اليوميّ، مثل مواضع استخدام Measure-Object وGroup-Object وSelect-String وCompare-O...
أين يتصل هذا الموضوع
ترتبط هذه المقالة بشكل طبيعي بصفحات الخدمات التالية.
دعم إعادة استخدام الأصول القديمة وترحيلها
لأنّ جرد الأصول المعتمدة على VBA وماكرو Excel وVBScript، وصولاً إلى الترحيل التدريجي، يتداخل مباشرة مع موضوع إعادة استخدام الأصول القائمة ودعم ترحيلها.
الاستشارات التقنية ومراجعة التصميم
لأنّ اختيار التقنيّة البديلة (VBA الأصلي / PowerShell / Office Scripts / Power Automate)، ومواءمتها مع التوقيع وAppLocker / App Control / ASR، أمر يسهل ترتيبه ضمن مراجعة التصميم قبل الترحيل.
الأسئلة الشائعة
أسئلة شائعة حول موضوع هذه المقالة.
- متى يُوقَف VBScript؟
- حتّى أبريل 2026 نشرت Microsoft خطّة لإيقاف VBScript على مراحل. في Windows 11 الإصدار 24H2 يصبح أوّلاً Feature on Demand (FOD) مفعَّلاً افتراضيّاً، ثمّ في المرحلة التالية معطَّلاً افتراضيّاً، وفي المرحلة الأخيرة يُحذَف من إصدارات Windows المستقبليّة. أي إنّ ما ينبغي فعله الآن قبل إعادة الكتابة الكاملة هو إظهار الأماكن التي تعتمد على VBScript. ما دام موجوداً كـ FOD تبقى إمكانيّة إعادة تفعيله كميزة اختياريّة، لكن بعد الحذف تزول هذه الفسحة.
- إذا أُوقف VBScript، هل يتوقّف VBA و Excel macro أيضاً؟
- لا. موضوع هذه المرّة ليس «إيقاف VBA». ما نشرته Microsoft هو الإيقاف التدريجيّ لـ VBScript، وأثره على مشاريع VBA يتركّز أساساً في تشغيل ملفّات `.vbs` الخارجيّة وفي مراجع مكتبات VBScript مثل VBScript.RegExp. المعالجة التي تشغّل `.vbs` مباشرة من VBA / Excel معرضة للتوقّف بعد تبديل المرحلة، وينبغي استخراجها بأولويّة. كذلك سكربتات تسجيل الدخول في GPO، و Scheduled Task، وسكربتات توزيع Intune، و VBScript Custom Action في MSI، مجالات تركّز يسهل أن تتعطّل دفعة واحدة.
- ما الذي يُستخدَم بديلاً عن VBScript؟
- البديل لا يُختار بـ «بماذا يمكن الكتابة» بل بمدى المسؤوليّة التي تُحمَّل إليه. للمعالجة التي تلمس نظام التشغيل والملفّات والمجلّدات المشتركة و AD والمهامّ والمثبِّتات، PowerShell الذي توصي به Microsoft هو الخيار الأساسيّ، وله أيضاً وسائل رسميّة لتشغيل التوقيع وسياسة التنفيذ. لعمليّات الخلايا والتقارير داخل مصنّف Excel، VBA الأصليّ؛ ولتنفيذ سحابيّ أو ربط Power Automate، Office Scripts؛ وللتكامل المكتبيّ الكثيف أو إضافات داخليّة طويلة العمر، .NET / VSTO؛ ولتنفيذ مجدول أو مسار موافقة، Power Automate مرشّح. بعد الاستبدال يلزم اختبار يشمل السياسات حتّى لا يتوقّف العمل بسبب ASR أو AppLocker.
- ماذا نفعل إن كان VBA يستخدم VBScript.RegExp؟
- اعتباراً من Office version 2508 (Build 19127.20154) أصبحت فئة RegExp مضمَّنة قياسياً في VBE، فإذا كان الغرض RegExp وحده صار ممكناً حلّ جزء من اعتماد VBScript بتحديث Office. غير أنّ بيئة مختلطة تبقى فيها عملاء Office قديمة يسهل أن تعمل فيها VBA نفسها على جهاز ولا تعمل على آخر. إن بقي جهاز واحد دون 2508 تصطدم الصياغة الجديدة بجدار توافق الترجمة، لذلك ينبغي تقييد إصدارات Office وقنوات التحديث في سجلّ، وحسم سياسة الترحيل مسبقاً بين «صياغة جديدة» و«صياغة قديمة» و«غلاف يتفرّع».
الملف الشخصي للمؤلف
صفحة الملف الشخصي لمؤلف المقالة.
غو كومورا
مؤسّس شركة كومورا سوفت ذ.م.م.
يركّز على تطوير برامج ويندوز، والاستشارات التقنية، والتحقيق في الأخطاء، ويتميّز في المشاريع التي تبقى فيها الأصول القديمة ناشطة، وفي تشخيص الأعطال التي يصعب تحديد سببها.