دليل المراجعة الشاملة لـ 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...
كيف نُطيل عمر أنظمة الويب الداخليّة المعتمدة على IE mode وكيف نخرج منها - تنظيم الاستراتيجيّات الميدانيّة من الإدارة المركزيّة لقائمة المواقع، إلى WebView2، والإعادة الهيكليّة التدريجيّة، ووصولًا إلى عزل VDI
نتناول استراتيجيّةً عمليّةً لإطالة عمر أنظمة الويب الداخليّة المعتمدة على IE mode والخروج منها تدريجيًّا عبر إدارة قائمة المواقع وتغليف W...
شرح ترميزات النصّ ونهايات السطور في Windows - Shift_JIS و UTF-8 و UTF-16 و mojibake و CRLF و LF
دليل عمليّ يوضّح كيف تتعايش UTF-8 و CP932 و UTF-16 و BOM ونهايات CRLF/LF في Windows، وكيف تشخّص mojibake وتمنع تلف البيانات.
ما هو VBA: حدوده، آفاقه المستقبليّة، متى يجب استبداله، وأنماط الترحيل العمليّة
نظرة عمليّة على ماهيّة VBA وحدوده الفعليّة، ومتى يكون الإبقاء عليه كافياً ومتى يستحقّ الاستبدال، مع أنماط ترحيل متدرّجة لأصول Excel وAcce...
فهم ترميزات النصّ على Windows - لماذا يحدث mojibake وما الذي ينكسر عند دخول Linux إلى المعادلة
يشرح المقال لماذا يحدث mojibake على Windows عند تبادل الملفّات مع Linux، ويوضّح طبقات الترميز المنفصلة (CP932، UTF-8، PowerShell) لتشخيصه...
أين يتصل هذا الموضوع
ترتبط هذه المقالة بشكل طبيعي بصفحات الخدمات التالية.
تطوير تطبيقات ويندوز
ندعم تطوير برامج ويندوز للأعمال، وتكامل الأجهزة، وأدوات التواصل.
دعم إعادة استخدام الأصول القديمة وترحيلها
ندعم إعادة استخدام وترحيل الأصول التي تحمل قيود COM / ActiveX / OCX أو 32bit / 64bit.
الملف الشخصي للمؤلف
صفحة الملف الشخصي لمؤلف المقالة.
غو كومورا
مؤسّس شركة كومورا سوفت ذ.م.م.
يركّز على تطوير برامج ويندوز، والاستشارات التقنية، والتحقيق في الأخطاء، ويتميّز في المشاريع التي تبقى فيها الأصول القديمة ناشطة، وفي تشخيص الأعطال التي يصعب تحديد سببها.
روابط عامة