دليل مراجعة 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.

مسار الترحيل ككلّ لا ينحرف إن فُكِّر فيه كما في الشكل.

تشغيل .vbs خارجيّVBScript.RegExpGPO / المهامّ / MSIاعتماد مجهول أو مدفونجرد الأصولنوع الاعتمادالاستبدال بـ PowerShell أو VBA الأصليّالترتيب نحو RegExp المضمَّن في Office 2508+تصحيح إعدادات الإدارة المركزيّة والموادّ الموزَّعةجمع سجلّات التشغيل عبر Sysmon / AppLocker / App Controlاختبار الوحدةاختبار التكاملنشر تجريبيّ في وضع التدقيقتعطيل VBScript FOD تدريجيّاً

لبيئة لا يظهر فيها الشكل، نلخّص في ثلاثة أسطر.

  1. صنِّف الاعتماد الذي وجده الجرد إلى أربعة: تشغيل .vbs خارجيّ / VBScript.RegExp / إعدادات إدارة مركزيّة (GPO والمهامّ و MSI) / مجهول
  2. حدّد جهة الاستبدال لكلّ صنف وأمرّ اختبار الوحدة، ثمّ التحم في اختبار التكامل
  3. انشر تجريبيّاً في وضع التدقيق، وإن لم تظهر مشكلة عطِّل 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 أيضاً تصميم التشغيل ينقسم بين سطح المكتب والسحابة، ويلزم تصميم الصلاحيّات متوسّط إلى مرتفع متوسّطة

إن رُسم معيار الاختيار بمزيد من الحدس يصبح كالتالي.

نعمنعم ومع أهمّيّة المشاركة/السحابةلانعملانعمانطلاق تدفّق أو محور موافقةاعتماد VBScript الذي وُجدهل يكتمل داخل مصنّف ExcelVBA الأصليّOffice Scriptsهل يلمس نظام التشغيل أو الملفّات أو المهامّ أو ADPowerShellهل هو تكامل واجهة كثيف أو إضافة طويلة العمر.NET / VSTOPower Automate

في ثلاثة أسطر أيضاً يصبح كالتالي.

  1. إن اكتمل داخل مصنّف Excel فـ VBA الأصليّ. إن كانت المشاركة أو التنفيذ السحابيّ أهمّ فـ Office Scripts
  2. إن لامس نظام التشغيل أو الملفّات أو المهامّ أو AD فـ PowerShell
  3. إن كان تكامل واجهة كثيفاً أو إضافة طويلة العمر فـ .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، أي إن قُسِّم حسب المسؤوليّة، ضاق أيضاً نطاق العطل.

الأدوات الموصى بها وروابط مرجعيّة

الموادّ الرسميّة يُستحسن قراءتها بهذا الترتيب.

  • 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.

أحدث المقالات التي تشترك في نفس الوسوم. عمّق فهمك بمواضيع مرتبطة.

ترتبط هذه المقالة بشكل طبيعي بصفحات الخدمات التالية.

الأسئلة الشائعة

أسئلة شائعة حول موضوع هذه المقالة.

متى يُوقَف 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 وقنوات التحديث في سجلّ، وحسم سياسة الترحيل مسبقاً بين «صياغة جديدة» و«صياغة قديمة» و«غلاف يتفرّع».

الملف الشخصي للمؤلف

صفحة الملف الشخصي لمؤلف المقالة.

غو كومورا

مؤسّس شركة كومورا سوفت ذ.م.م.

يركّز على تطوير برامج ويندوز، والاستشارات التقنية، والتحقيق في الأخطاء، ويتميّز في المشاريع التي تبقى فيها الأصول القديمة ناشطة، وفي تشخيص الأعطال التي يصعب تحديد سببها.

العودة إلى المدونة