دليل المراجعة الشاملة لـ VBA و Excel macro والأدوات الداخليّة استعدادًا لإيقاف VBScript - الجرد / الكشف الساكن / سجلّات التشغيل / اختيار البديل / الاختبار / النشر التدريجيّ

· · VBScript, VBA, Excel, PowerShell, Office, Windows, الاستفادة من الأصول القائمة

الملخّص التنفيذيّ

في إبريل 2026، أعلنت Microsoft رسميًّا خطّتها لإيقاف VBScript على مراحل، حيث يتمّ تفعيله أوّلًا بوصفه Feature on Demand مفعّلًا افتراضيًّا في Windows 11 الإصدار 24H2، ثمّ تحويله في المرحلة التالية إلى معطّل افتراضيًّا، ثمّ إزالته نهائيًّا من إصدارات Windows المستقبليّة في المرحلة الأخيرة. أي إنّ ما ينبغي فعله الآن قبل “إعادة الكتابة الكاملة” هو تظهير الأماكن التي تعتمد على VBScript بصورة مرئيّة.

محاور النقاش الواقعيّ في VBA و Excel macro محوران أساسيّان. الأوّل هو الحالات التي تُستدعى فيها ملفّات .vbs خارجيًّا، والثاني هو الإشارات إلى مكتبات نوع VBScript مثل VBScript.RegExp. أمّا بالنسبة للثاني، فابتداءً من Microsoft 365 Apps الإصدار Version 2508 (Build 19127.20154) أصبحت فئة RegExp مدمجة قياسيًّا في VBE، وصار جزء من الاعتماد على RegExp على الأقلّ أسهل في الترحيل. في المقابل، في البيئات المختلطة التي تبقى فيها أجهزة Office قديمة، يحدث أن يعمل الكود نفسه على بعض الأجهزة دون غيرها بسهولة.

ما يجعل الترحيل صعبًا ليس VBScript بحدّ ذاته، بل التشغيل المحيط به. على سبيل المثال، حتّى لو استبدلت الكود ليستدعي powershell.exe من Excel، فلن يعمل الإنتاج إذا اصطدم بقواعد تقليص سطح الهجوم مثل “حظر إنشاء العمليّات الفرعيّة من تطبيقات Office” و”حظر استدعاءات Win32 API من ماكروهات Office”، أو AppLocker، أو App Control for Business، أو سياسة تنفيذ PowerShell، أو إدارة التوقيع، أو التحكّم في الماكرو للملفّات ذات MOTW. ينبغي أن يُصمَّم خطّة الترحيل لا على مستوى تحويل الكود فحسب، بل بحيث تشمل السياسات والتوقيع وتدقيق السجلّات.

أقصر مسار هو: الجرد ← الكشف الساكن ← جمع سجلّات التشغيل ← اختيار البديل ← الاختبار ← النشر التدريجيّ. في هذا المقال، ننظّمها بهذا الترتيب بصورة عمليّة.

تنظيم التغييرات

أوّل ما يجب فهمه هو أنّ النقاش هذه المرّة ليس “إيقاف VBA”. ما تنشره Microsoft هو حصرًا الإيقاف التدريجيّ لـ VBScript، والأثر على مشاريع VBA يتركّز أساسًا في تشغيل ملفّات .vbs الخارجيّة والإشارات إلى مكتبات VBScript. كذلك في Microsoft 365 Developer Blog، يُلخَّص تشغيل .vbs من VBA واستخدام VBScript.RegExp بوصفهما نقطتَي تأثير ممثّلتين.

من الناحية العمليّة، يُسهّل ترتيب الأولويّات على النحو التالي تنظيم العمل.

نمط الاعتماد ما يحدث الأولويّة
تشغيل .vbs مباشرة من VBA / Excel يفشل من Phase 2 فصاعدًا حسب إعدادات الجهاز، ويتوقّف من حيث المبدأ في Phase 3 عالية
الإشارة إلى VBScript.RegExp عرضة للأعطال في البيئات المختلطة التي يبقى فيها Office أقدم من 2508 عالية
تشغيل عمليّات خارجيّة عبر WScript.Shell / Shell احتمال التوقّف بـ ASR أو AppLocker حتّى بعد الاستبدال عالية
سكربتات GPO عند تسجيل الدخول/بدء التشغيل/الإيقاف، Scheduled Task، سكربتات التوزيع عبر Intune عرضة لحدوث أعطال جماعيّة عند تحديث OS أو تبديل السياسات عالية
MSI VBScript Custom Action يفشل فجأةً في التثبيت أو الإصلاح أو إلغاء التثبيت عالية

ترتيب الأولويّات هذا حكم عمليّ يستند إلى خطّة إيقاف VBScript على مستوى Windows، وإستراتيجيّة الكشف الرسميّة، ومواصفات ASR/AppLocker/App Control.

RegExp وحده وضعه مختلف قليلًا. ابتداءً من Microsoft 365 Apps Version 2508، أصبحت فئة RegExp مضمّنة قياسيًّا في جانب VBE، فبات بإمكاننا “حلّ جزء من الاعتماد على VBScript عبر تحديث Office” فيما يخصّ استخدام RegExp فقط. ولكنّ هذا لا يُحَلّ تلقائيًّا في المؤسّسات التي يبقى فيها Office قديم أو إصدار الترخيص الدائم، أو البيئات المختلطة، أو صور الأجهزة القديمة. إدراج كلٍّ من “تحديث Office” و”التبديل التدريجيّ في Windows” في السجلّ أمر مهمّ.

كيفيّة إجراء الجرد

البحث باسم الملفّ وحده لا يكفي للجرد. نُوصي بالاحتفاظ على الأقلّ بالعشر زوايا التالية بوصفها أعمدة على مستوى المشروع والأداة والمهمّة العمليّة.

  • طريقة كشف مواضع الاعتماد على VBScript
    تسجيل البحث في الملفّات وتحليل الكود وتحليل السجلّات بصورة منفصلة.
  • استخدام CreateObject / GetObject / Execute / ExecuteGlobal وما شابهها داخل VBA
    لأنّ الاعتماد قد يختبئ داخل السلاسل النصّيّة، يَسهل أن يفوت البحثَ الساكن.
  • استدعاءات السكربتات الخارجيّة في Excel macro
    يُحتفَظ بـ WScript.Shell، ودالّة Shell، و wscript.exe / cscript.exe، و .vbs / .js / .ps1 كلٍّ منها بصورة منفصلة.
  • اعتماد الأدوات الداخليّة و batch الداخليّ على السكربتات
    تُدرَج 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[Asset inventory] --> B{Type of dependency}
    B -->|External .vbs execution| C[Replace with PowerShell or native VBA]
    B -->|VBScript.RegExp| D[Refactor to built-in RegExp on Office 2508+]
    B -->|GPO / Task / MSI| E[Fix central management settings and packages]
    B -->|Unknown / hidden dependencies| F[Collect runtime logs via Sysmon / AppLocker / App Control]
    C --> G[Unit test]
    D --> G
    E --> H[Integration test]
    F --> H
    H --> I[Pilot rollout in audit mode]
    I --> J[Stage-by-stage disabling of VBScript FOD]

عند اعتماد هذا الترتيب، يُمكن تخفيض إعادة العمل النموذجيّة بصورة ملموسة، أي تلك التي يقول صاحبها: “أعدت الكتابة أوّلًا، ثمّ سقط لاحقًا بسبب GPO أو ASR”.

الكشف العمليّ وأمثلة الكود

البحث في الملفّات وتجميع معلومات التهيئة

في إرشادات الكشف من Microsoft، يُوصى بالبحث المتكرّر عن .vbs في مسارات واضحة الاستخدام أوّلًا مثل C:\Users و C:\ProgramData و C:\Scripts، والتحقّق بشكل منفصل من GPO و Scheduled Task وسكربتات التوزيع عبر Intune وحزم MSI. مراقبة vbscript.dll عبر Sysmon فعّالة، ولكنّ مراقبة Image Load تُولّد حجمًا كبيرًا من السجلّات وعبئًا تشغيليًّا، لذا ينبغي أوّلًا التحقّق منها على مستوى pilot صغير.

# Quickly survey script dependencies on endpoints and shared folders
$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

ثمّ نمسح Task Scheduler. الأدوات الداخليّة كثيرًا ما يكون wscript.exe / cscript.exe / .vbs مدفونًا داخل تعريفات المهامّ أكثر من الملفّات.

# Extract VBScript invocations from Scheduled Tasks
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، النظر إلى الإشارات (References) فقط لا يكفي. يستطيع CreateObject و GetObject تشغيل COM عبر سلاسل نصّيّة، لذا قد يظلّ هناك اعتماد حتّى لو لم يظهر شيء في الإشارات. كذلك في وثائق VBA/Office من Microsoft، يُشرَح CreateObject بوصفه وسيلة أساسيّة لإنشاء كائنات COM، ويُستخدَم FileSystemObject و Scripting.Dictionary بهذه الصيغة. كذلك، لقراءة مشروع VBA برمجيًّا، يلزم تفعيل “الثقة في الوصول إلى نموذج كائن مشروع VBA”.

' Prerequisites:
'  - Enable "Trust access to the VBA project object model" in Trust Center
'  - Protected projects require source export or owner verification separately
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: Inspect processes that loaded 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: Inspect script and MSI audit logs
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 إلى استدعاء عمليّة خارجيّة وتشمل الأمر OS أو مجلّدًا مشتركًا أو 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
# Apply and verify a code-signing signature
$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 أنسب للتنسيق (orchestration). الجدول التالي تقدير عمليّ بناءً على الخصائص الموثّقة رسميًّا لكلّ طريقة. الأرقام تقديرات الكاتب.

البديل المعالجة المناسبة الإيجابيّات الرئيسة القيود الرئيسة تقدير الجهد الأولويّة
VBA الأصليّ عمليّات الخلايا، التقارير، إخراج ملفّات بسيط، تعديلات طفيفة على ماكروهات قائمة يَسهل الاستفادة من الأصول القائمة، كلفة تدريب المستخدمين منخفضة ضعف الحوكمة في عمليّات OS أو التوقيع/التوزيع، يبقى الاعتماد على عمليّات خارجيّة منخفض عالية
PowerShell عمليّات الملفّات، المجلّدات المشتركة، AD، المهامّ، المثبّتات، أتمتة التشغيل البديل الموصى به من Microsoft، يدعم تشغيل التوقيع وسياسة التنفيذ يلزم ضبط سياسة التنفيذ والتوقيع و ASR و AppLocker متوسّط عالية
.NET / VSTO منطق أعمال معقّد، إضافات داخليّة طويلة العمر، تكامل UI ثقيل تكامل Office عميق، يمكن تقديم الميزات على مستوى تطبيق يفترض Windows، يلزم تصميم runtime VSTO والتوزيع عالٍ متوسّطة
Office Scripts تنسيق روتينيّ داخل مصنّف Excel، التشغيل السحابيّ، التكامل مع Power Automate عبر المنصّات، سهل المشاركة، سهل التنظيم لما يدور حول Excel حصريّ لـ Excel، لا يناسب عمليّات OS الخارجيّة، قيود في البيانات الضخمة متوسّط متوسّطة
Power Automate تشغيل مجدول، الموافقات، التشغيل بوصول الملفّ، التكامل مع خدمات أخرى يَسهل تظهير التدفّق ككلّ، يمكن دمج PowerShell/.NET فيه تصميم التشغيل ينقسم بين سطح المكتب والسحابة، يلزم تصميم الصلاحيّات متوسّط إلى عالٍ متوسّطة

ولرسم معايير الاختيار بصورة أكثر حدسًا، تظهر هكذا.

flowchart TD
    A[Detected VBScript dependency] --> B{Self-contained inside Excel workbook}
    B -->|Yes| C[Native VBA]
    B -->|Yes and sharing/cloud focus| D[Office Scripts]
    B -->|No| E{Touches OS / files / tasks / AD}
    E -->|Yes| F[PowerShell]
    E -->|No| G{Heavy UI integration or long-lived add-in}
    G -->|Yes| H[.NET / VSTO]
    G -->|Flow-driven or approval-centric| I[Power Automate]

أمّا فيما يخصّ RegExp فقط، فإذا توفّرت بيئة يقتصر فيها كلّ شيء على Microsoft 365 Apps 2508 فأعلى، فإنّ إعادة الترتيب إلى Dim re As RegExp / Set re = New RegExp فعّالة جدًّا. ولكن إذا بقي ولو جهاز واحد بـ Office قديم، فإنّ ذلك الكود سيصطدم بجدار توافق التصريف. في البيئات المختلطة ينبغي أن تُحسَم أوّلًا سياسة الترحيل بين “البِنية الجديدة” أو “البِنية القديمة” أو “wrapper تفرّع”.

الاختبار والتشغيل

خطّة الاختبار

ترحيل VBScript لا يكفي فيه اختبار الوحدة وحده. بدون إعادة الاختبار في ظروف مكافئة للإنتاج وسياسات الأمن مفعّلة، يتوقّف PowerShell أو سكربت .NET بعد الاستبدال لأسباب أخرى. كذلك في وثائق Microsoft، تُعامَل سياسة تنفيذ PowerShell، و AppLocker، ووضع تدقيق App Control، و ASR، والتحكّم في الماكرو لملفّات MOTW بوصفها قواعد منفصلة.

المستوى محاور الفحص أمثلة شروط النجاح
اختبار الوحدة المدخلات/المخرجات، معالجة الاستثناءات، ترميز الأحرف، نتائج التعابير المنتظمة يُعيد النتيجة ذاتها التي كانت تعطيها المعالجة القديمة
اختبار التكامل Excel⇔PowerShell، المجلّدات المشتركة، المهامّ، AD، إخراج التقارير تُكمل الـ batch بأكمله دون أخطاء
اختبار الأمن التوقيع، سياسة التنفيذ، AppLocker، App Control، ASR، MOTW يُنفَّذ/يُدقَّق كما هو متوقَّع حتّى بعد تطبيق السياسة
اختبار القبول إجراءات التشغيل، الزمن، رسائل عند الخطأ تُبسَّط أو تُحفَظ إجراءات الميدان
اختبار التوافق والأداء فروق إصدارات Office، البيانات الكبيرة، عبء جمع السجلّات يستقرّ ضمن أداء مقبول حتّى على الأجهزة المختلطة

ممّا يَسهل إغفاله بشكل خاصّ ما يلي:

  • استبدال يطلق PowerShell من Excel قد يصطدم بـ قاعدة ASR “حظر إنشاء العمليّات الفرعيّة من تطبيقات Office”.
  • إذا بقيت تصاريح أو استدعاءات API في VBA، فقد يصطدم ذلك بـ قاعدة ASR “حظر استدعاءات Win32 API من ماكروهات Office”.
  • ملفّات اختبار .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 إلى وضع التدقيق أوّلًا في بيئة الاختبار
فشل في الإنتاج فقط بسبب قصور التوقيع يعمل على PC المطوِّر ويُرفض على PC المستخدم تثبيت تشغيل التوقيع باستخدام Set-AuthenticodeSignature و Get-AuthenticodeSignature
تعطّل RegExp في Office المختلط خطأ تصريف على بعض الأجهزة تدوين ما تبقّى من نسخ أقدم من 2508 في السجلّ، وتقديم wrapper أو التحديث أوّلًا
Office Scripts / Flow ثقيل timeout على CSV كبير تصميم تقسيم الملفّات وتقطيع batch ونقاط التزامن

الإجراءات المضادّة في هذا الجدول هي ترجمة للقيود التصميميّة الواردة في الوثائق الرسميّة لـ Microsoft إلى التشغيل الداخليّ.

التراجع لا يكفي فيه “إعادة الكود”. على الأقلّ ينبغي اعتبار استعادة النسخة القديمة من المنشورات، وإعادة السياسات، وإمكانيّة إعادة تفعيل الميزة الاختياريّة، واستمرار جمع السجلّات ضمن مجموعة واحدة. ما دام VBScript لا يزال موجودًا بوصفه FOD، تبقى إمكانيّة إعادة تفعيله بوصفه ميزة اختياريّة وفقًا لإرشادات Phase 2، ولكن بعد إزالته في Phase 3 يَزول هذا المهرب.

دراسة حالة ترحيل عيّنة

كنموذج تمثيليّ، نفترض ماكرو التجميع الشهريّ في قسم المحاسبة. الوضع الحاليّ هو أنّ Excel macro يطلق cleanup.vbs عبر WScript.Shell، وبعد تنسيق CSV يتحقّق من الأكواد بـ VBScript.RegExp، ثمّ يُخرج أخيرًا إلى المجلّد المشترك. هذا التركيب يستقبل ضربة إيقاف VBScript مباشرةً، وحتّى لو استُبدل ببساطة بـ PowerShell فإنّه عرضة للتوقّف مرّة أخرى بسبب ASR وتشغيل التوقيع.

في هذه الحالة، التقسيم هو الإجابة الصحيحة. يُحوَّل التحقّق والتنسيق والتجميع الذي يكتفي بداخل Excel إلى VBA الأصليّ أو RegExp المدمج في Office 2508+. يُحوَّل تحويل الملفّات والإدخال/الإخراج إلى المجلّد المشترك إلى PowerShell. إذا كانت نقطة الانطلاق “وصول الملفّ” أو “موعد يوميّ”، تُحوَّل إلى Power Automate. هكذا يمكن تنظيم المسؤوليّات التي كانت محشورة في .vbs واحد.

مثال على التركيب بعد الترحيل على هذا النحو.

  • Excel macro: التحقّق من المدخلات، عمليّات الواجهة، الرسائل للمستخدم
  • PowerShell: تطبيع CSV، الإدخال/الإخراج إلى المجلّد المشترك، إخراج السجلّات
  • تشغيل التوقيع: توقيع Authenticode على سكربتات PowerShell
  • الأمن: التحقّق المسبق لـ AppLocker/App Control في وضع التدقيق، الحكم على الحاجة إلى استثناء ASR
  • توسّع مستقبليّ: نقل تدريجيّ للمعالجة الروتينيّة داخل Excel إلى Office Scripts

ميزة هذا الأسلوب هي فصل الاعتماد على VBScript runtime مبكرًا، دون الاضطرار إلى إعادة بناء كلّ شيء دفعةً واحدة. يُمتصّ RegExp بتحديث Office، وتُحوَّل سكربتات التشغيل إلى PowerShell، وتدفّق الأعمال إلى Power Automate، وعند التقسيم بهذه الطريقة حسب المسؤوليّة، يَصغر نطاق الأعطال أيضًا.

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

أوّلًا، الوثائق الرسميّة التي ينبغي قراءتها وفق الترتيب التالي.

  • VBScript deprecation: Timelines and next steps
    نقطة بداية للتحقّق من خارطة الطريق العامّة ومعنى Phases.
  • 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 نقطة انطلاق modular يَسهل تشغيلها.
  • oletools / olevba
    مناسب بوصفه مساعدًا لاستخراج كود VBA من ملفّات Office وكشف الكلمات المفتاحيّة المريبة وماكروهات التشغيل التلقائيّ.

خلاصة القول: الاستعداد لإيقاف VBScript لا يكفي فيه “البحث عن VBScript واستبداله بـ PowerShell”. إدارة تحديث Office، وتحليل الكود، وتركيب التشغيل، والتوقيع، و ASR/AppLocker/App Control، و UAT في سجلّ واحد هي الطريقة الأقصر والأكثر تأكيدًا. ما يمكن إنقاذه بتحديث Office (مثل RegExp) أنقذه مبكرًا، وما يَسهل انهياره عند التبديل التدريجيّ على مستوى Windows (مثل تشغيل .vbs والاعتماد على GPO/المهامّ/MSI) افصِله بأولويّة.

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

ما يجب التحقّق منه عندما لا يعمل ActiveX على Office 2024 / Microsoft 365 - الترتيب العمليّ لتغطية التعطيل الافتراضيّ، 32bit / 64bit، تسجيل COM، DLL التابعة، ووصولًا إلى IE mode

دليل عمليّ لتشخيص توقّف ActiveX على Office 2024 و Microsoft 365، يرتّب الفحوص من التعطيل الافتراضيّ إلى تطابق 32bit / 64bit وتسجيل COM وD...

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

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

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

غو كومورا

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

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

روابط عامة

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