إدارة تكوين Windows تصريحيّاً بـ DSC ── ابدأ IaC بـ dsc.exe

· آخر تحديث: · · Windows, DSC, IaC, PowerShell, winget, إدارة التكوين

سجل التعديلات (النسخة الأولى، نُشرت في 28 Aug، 2026)
النشر الأول

«أريد إعادة بناء الجهاز القياسي»، «أريد إعادة تشغيل إعداد فشل في المنتصف»، «أريد أن أجد إعداداً غيّره أحدهم يدوياً». حين تدير أجهزة Windows وخوادمها بإجراءات وسكربتات، يظهر العناء في إعادة إنتاج الإعداد نفسه والحفاظ عليه.

إن لم تتعقّب التغييرات بعد التنفيذ، تنحرف الإجراءات عن الواقع. وفي BAT وPowerShell أيضاً، كي لا يحدث تطبيق مزدوج أو خطأ عند إعادة التشغيل، تحتاج أن تكتب بنفسك فحص الوجود والتفرّع. نقل هذا العبء إلى إدارة تكتب «الحالة المرغوبة» لا «الإجراءات» هو DSC (Desired State Configuration).

تتناول هذه المقالة Microsoft DSC v3 (dsc.exe) الذي ظهر عام 2025 أداة سطر أوامر لا تعتمد على PowerShell. هي مدخل لإدارة عملاء Windows والخوادم نفسها بـ IaC تصريحي (Infrastructure as Code)، كما تستخدم Terraform وAnsible على Linux وفي السحابة.1

الجمهور المطوّرون ومسؤولو نظم المعلومات الذين يريدون نقل إدارة تكوين Windows من الإجراءات والسكربتات. الافتراض Windows 10/11، وDSC 3.0 فما بعده، والعمليات الأساسية في PowerShell، والصعوبة متوسّطة. أسماء المحوّلات في DSC 3.2 فما بعده، وإصدارات WinGet المطلوبة، مشروحة في مواضعها.

1. الخلاصة أوّلاً ── اكتب الحالة، وتأكّد، ثمّ طبّق

إن كنت تبدأ الآن إدارة تكوين Windows تصريحيّاً، فاختر Microsoft DSC v3 (dsc.exe). تكتب «الحالة المرغوبة» في YAML/JSON، وتترك المقارنة بالحالة الحالية والتطبيق لـ DSC والموارد. الأساس إدارة متساوية المفعول: مهما كرّرت تطبيق التكوين نفسه، لا يفعل شيئاً للبنود التي هي أصلاً في الحالة المرغوبة.23

غير أن «إمكان التطبيق مراراً» و«جواز محتوى التطبيق» أمران مختلفان. اقرأ الحالة أوّلاً، وتأكّد من الفرق والتنبؤ، ثمّ طبّق. كذلك ليس DSC v3 وكيلاً مقيماً، لذا تصمّم التدقيق والإصلاح الدوريّين على حدة.41

ترتيب القراءة كما يلي.

ما تقرّره الآن الفصل ما تحصل عليه
أيّ DSC يُقصَد، وما يمكن تفويضه الفصلان 2 و3 تمييز الأجيال ودور get وtest وset
التجربة على نطاق صغير ثمّ التجميع في ملفّ تكوين الفصلان 4 و5 من فحص المورد المنفرد إلى تطبيق التكوين كلّه
الاستفادة من أصول PSDSC وwinget القائمة الفصل 6 شروط ترحيل المحوّل وتنسيق الملفّ
الحفاظ على الحالة بعد التطبيق الفصلان 7 و8 كشف الانحراف، صلاحيات التشغيل، ومعاملة الأسرار
من إدارة الإجراءات إلى إدارة الحالةفي سكربت الإجراءات تنفّذ بنفسك فحص الوجود والتفرّع لإعادة التشغيل، أمّا في DSC فتصرّح بالحالة المرغوبة ويتولّى DSC والموارد المقارنة والتطبيقكتابة الإجراءات (BAT وPowerShell)تنفيذ فحص الوجود والتفرّع بنفسككتابة الحالة (DSC)المقارنة بالحالة الحاليةتطبيق البنود اللازمة فقط

الشكل 1: نقل مسؤولية التفكير في إعادة التشغيل من تفريع الإجراءات إلى التصريح بالحالة واستخدام الموارد.

في المخطّط، يشير الخطّ المتّصل إلى علاقة قائمة دائماً، ويشير الخطّ المتقطّع إلى علاقة مشروطة (شروط قيامها مذكورة في شرح كلّ علاقة في الصفحة التفصيليّة). القائمة الكاملة للعلاقات (المجموع 17، مع الأدلّة ودرجة اليقين) وتعريفات المفاهيم الرئيسة مجمّعة في صفحة تفاصيل خريطة المعرفة (باليابانية). البيانات: JSON-LD / Turtle

2. تمييز DSC الذي تستخدمه ── أربع سلالات، وما ليس في v3

2.1. بطل هذه المقالة هو dsc.exe المستقلّ

البحث عن «DSC» يُخرج معلومات أربع سلالات تختلف في الكتابة وطريقة التشغيل. أكّد أوّلاً أيّ سلالة يعالجها المصدر.5

السلالة الكيان الموقع
PSDSC v1.1 مضمَّن في Windows PowerShell 5.1 قديم. LCM مقيم وتنسيق MOF
PSDSC v2 وحدة لـ PowerShell 7 PSDesiredStateConfiguration 2.x
PSDSC v3 (معاينة) وحدة PowerShell لدعم Linux في Azure Machine Configuration
Microsoft DSC v3 dsc.exe مستقلّ بطل هذه المقالة. مستقلّ عن PowerShell ومتعدّد المنصّات

Microsoft DSC v3 ليس مجرّد تحديث لوحدة PowerShell DSC (PSDSC). إنّه منتج آخر أُعيدت كتابته بفصل الاعتماد على PowerShell. تُكتَب التكوين بيانات JSON/YAML، ويمكن تنفيذ الموارد بأيّ لغة. DSC نفسه يعمل على Linux وmacOS وWindows.1

نسب سلالات DSC الأربعمن PSDSC v1.1 المضمَّن في Windows PowerShell 5.1 تفرّع PSDSC v2 لـ PowerShell 7 ومعاينة PSDSC v3 لـ Machine Configuration، وبمعزل عنها أُعيدت كتابة Microsoft DSC v3 مستقلّاً عن PowerShell ليصير البطل الحاليإعادة كتابةPSDSC v1.1 (مضمَّن في WinPS 5.1)PSDSC v2 (PowerShell 7)معاينة PSDSC v3Microsoft DSC v3 (dsc.exe)Azure Machine Configurationبطل هذه المقالة

الشكل 2: حتّى مع الاسم نفسه DSC، ميّز أجيال وحدات PowerShell عن dsc.exe المستقلّ.

«DSC» فيما يلي يعني Microsoft DSC v3. إضافة «DSC v3» و«dsc.exe» إلى عبارة البحث تسهّل فصله عن مصادر الأجيال الأقدم. طريقة استدعاء موارد PSDSC القائمة في الفصل 6.

2.2. v3 ليس خدمة مقيمة تحفظ التكوين وتصلحه تلقائياً

كان LCM (Local Configuration Manager) في PSDSC v1.1 وكيلاً مقيماً يحفظ التكوين ويجري تطبيقاً دورياً وإصلاحاً تلقائياً. ليس لـ DSC v3 LCM؛ هو أمر يعمل فقط عند استدعائه. تثبيت dsc.exe وتطبيق التكوين مرّة لا يعني أنّه سيصلح التغييرات اللاحقة من تلقاء نفسه.1

مقابلة نمط LCM المقيم في v1.1 ونمط الأمر في v3في PSDSC v1.1 تولّى LCM المقيم حفظ التكوين والسحب الدوري والإصلاح التلقائي، أمّا DSC v3 فيُشغَّل أمراً فقط لذا تختار بنفسك بنية التشغيل الدوري من جدولة المهام أو CI أو Machine ConfigurationPSDSC v1.1: LCM مقيمحفظ التكوين وسحب دوري وإصلاح تلقائيDSC v3: تشغيل أمري فقطبنية التشغيل تُعدّها بنفسكجدولة المهام وCI وMachine Configuration

الشكل 3: في v3 تفصل «كيف تُكوِّن» عن «متى تُشغِّل»، وتوكل الثانية إلى جدولة المهام أو طبقة إدارة أعلى.

هذا ليس تراجعاً وظيفياً فحسب، بل تغيير تصميم يفتح طريقة التشغيل لأدوات العصر. غير أنّ افتراض تشغيل خادم السحب في v1.1 كما هو يوقع في الحيرة. إن احتجت إنفاذاً مستمرّاً، يلزم اختيار بنية تشغيل مثل جدولة المهام أو CI أو Machine Configuration. للتشغيل العملي انتقل إلى الفصل 7.

3. فهم التكوين التصريحي ── مقارنة الإجراءات بالحالة

3.1. أخرج فحص الوجود والتفرّع من التصريح

مثال: حفظ وضع تشغيل التطبيق في السجلّ. في PowerShell الأمري تفحص وجود المفتاح، وتنشئه إن لزم، ثمّ تضبط القيمة. أنت تدير بنفسك الإجراءات التي تجعل إعادة التشغيل ممكنة.

# أمري: تكتب «الإجراءات». تدير بنفسك كلّ التفرّع والترتيب
$path = 'HKCU:\Software\MyCompany\App'
if (-not (Test-Path $path)) {
    New-Item -Path $path -Force | Out-Null
}
Set-ItemProperty -Path $path -Name 'Mode' -Value 'standard'

في DSC تصير المتطلّبات نفسها تصريحاً بالحالة كالتالي. لا تكتب جهة التصريح فحص الوجود ولا تفرّع الإنشاء. المثال الكامل الذي يضع هذه القطعة في resources داخل مستند تكوين يظهر في الفصل 5.

# تصريحي: تكتب «الحالة». خطوات الإنشاء والإصلاح عمل المورد
- name: وضع تشغيل التطبيق
  type: Microsoft.Windows/Registry
  properties:
    keyPath: HKCU\Software\MyCompany\App
    valueName: Mode
    valueData:
      String: standard

الفرق ليس أنّ PowerShell لا يستطيع أن يكون متساوي المفعول. إنّه تفويض الفحص والتطبيق اللذين كنت تكتبهما في السكربت إلى المورد. حتّى على جهاز فشل في المنتصف أو جهاز مضبوط أصلاً، يمكن إعادة التطبيق بمعيار «الحالة المرغوبة» نفسه.2

3.2. المورد يتولّى get وtest وset

المورد في قلب DSC يوفّر العمليات لكلّ هدف تكوين: قيمة سجلّ، ميزة Windows، متغيّر بيئة، وغيرها. يكتب المستخدم «ماذا ينبغي أن يكون»، ويترك «كيف يُضبَط» للمورد.6

العملية الدور الفرق في التنفيذ
get جلب الحالة الحالية كلّ الموارد تنفّذها
test الحكم هل الحالة الحالية تطابق التصريح إن لم يكن هناك تنفيذ مخصّص، ينوب DSC باختبار مركَّب يقارن نتيجة الجلب بالتصريح
set المواءمة مع الحالة المرغوبة تنفّذها فقط الموارد التي تستطيع فرض الحالة. ليست في موارد للقراءة فقط مثل معلومات نظام التشغيل

dsc config set الذي يطبّق التكوين كلّه يختبر كلّ مثيل أوّلاً، ويستدعي set فقط لما ليس في الحالة المرغوبة. هذه آلية إمكان تطبيق التكوين نفسه مراراً.3

حلقة التقارب عبر get وtest وsetيقارن test الحالة المرغوبة المكتوبة في مستند التكوين بالحالة الحالية، فإن لم يوجد فرق لم يفعل شيئاً، وإن وُجد طبّق set الفرق فقط وأمكن التحقّق من النتيجة بـ get، وهو تدفّق تقارب متساوي المفعوللا فرقهناك فرقمستند التكوين (الحالة المرغوبة)test: مقارنة بالحالة الحاليةلا يفعل شيئاً (متساوي المفعول)set: تطبيق الفرق فقطget: التحقّق من حالة النتيجة

الشكل 4: في تطبيق التكوين كلّه تقارن أوّلاً، ولا تغيّر إلا مثيلات الموارد اللازمة.

3.3. لا تخلط بين resource set المنفرد وconfig set للتكوين كلّه

dsc resource set يستدعي دائماً set للمورد المحدَّد. أمّا الاختبار المسبق فيعتمد على تنفيذ المورد وعلى implementsPretest في البيان. المهم ألّا تفترض أنّ الاختبار المسبق الذي يجريه config set موجود أيضاً في resource set.3

فرق الاختبار المسبق بين التكوين كلّه والاستدعاء المنفرديختبر config set كلّ مثيل ويستدعي set عند الحاجة فقط، أمّا resource set فيستدعي set للمورد دائماً والاختبار المسبق هناك يعتمد على تنفيذ المورد وبيانهنعملاconfig setاختبار كلّ مثيلفي الحالة المرغوبة؟لا يستدعي setيستدعي setresource setاستدعاء set للموردالاختبار المسبق حسب التنفيذ

الشكل 5: حتّى مع set نفسه، ميّز عملية التكوين كلّه التي يختبرها DSC مسبقاً عن العملية المنفردة التي تُمرَّر مباشرة إلى المورد.

يسهل الفهم إن فصلت أوّلاً المراقبة بـ get وtest المنفردين، ثمّ التجميع في مستند تكوين حين تدير عدّة حالات. تساوي المفعول خاصّية لإعادة التشغيل؛ لا يلغي نقص الصلاحيات ولا أخطاء تنفيذ المورد.

4. أوّل العمليات ── ثبّت وراقب بـ get وtest

4.1. جهّز dsc.exe وتأكّد من الموارد المتاحة

طريقتا التثبيت: فكّ أرشيف إصدارات GitHub وإضافته إلى PATH، أو التثبيت من winget مع تحديد مصدر Microsoft Store على Windows.1

# البحث عن الإصدار المستقرّ وتثبيته من مصدر Microsoft Store
winget search DesiredStateConfiguration --source msstore
winget install --id 9NVTPZWRC6KQ --source msstore

بعد التثبيت، اعرض الموارد المتاحة في بيئتك.

dsc resource list

افصل تأكيد تجهيز DSC نفسه عن تأكيد إمكان استخدام المورد الذي تريده. اعثر هنا على اسم النوع المستهدف، ثمّ حدّد الخاصّيات التي تُدخَل. إن استخدمت موارد PSDSC من جيل أقدم، راجع أيضاً محوّلات الفصل 6.

4.2. ابدأ بقراءة سجلّ تحت المستخدم

يمكن استدعاء الموارد واحداً واحداً دون كتابة مستند تكوين. المثال التالي يقرأ قيمة تحت HKCU بـ get، ويحكم بـ test هل هي الحالة المرغوبة. ليست أيّ منهما عملية لتغيير القيمة.7

# جلب الحالة الحالية (get)
dsc resource get --resource Microsoft.Windows/Registry `
  --input '{"keyPath":"HKCU\\Software\\MyCompany\\App","valueName":"Mode"}'

# الحكم هل هي الحالة المرغوبة (test) ── بلا أيّ تغيير
dsc resource test --resource Microsoft.Windows/Registry `
  --input '{"keyPath":"HKCU\\Software\\MyCompany\\App","valueName":"Mode","valueData":{"String":"standard"}}'
العمليات الأربع لأمر dsc resourceتحت أمر dsc resource تتفرّع أربع عمليات: list لعرض الموارد، وget لجلب الحالة الحالية، وtest للحكم هل هي الحالة المرغوبة بلا تغيير، وset للتطبيق (للموارد التي تنفّذ Set فقط)أمر dsc resourcelist: قائمة المواردget: جلب الحالة الحاليةtest: حكم فقط بلا تغييرset: تطبيق (موارد تدعم Set)

الشكل 6: ابحث عن المورد بـ list، واقرأ القيمة الحالية بـ get، وتأكّد من الفرق عن التصريح بـ test، ثمّ انتقل إلى set.

يحتاج set الذي يغيّر الجهاز كلّه، مثل HKLM وإعدادات النظام، امتيازات المسؤول. ابدأ التجارب الأولى بأمثلة تحت المستخدم (مثل HKCU)، وتأكّد من الهدف والصلاحيات في أيّ عملية تتضمّن تغييراً. استخدام محوّل موارد PSDSC من سلالة Windows PowerShell يفترض أيضاً التشغيل بامتيازات المسؤول.7 فصل مستخدم التشغيل عن التكوين في الفصل 8.

5. مستند التكوين ── من التصريح إلى التحقّق بعد التطبيق

5.1. اجمع في YAML «ماذا ينبغي أن يكون وكيف»

مستند التكوين ملفّ YAML/JSON يصرّح بعدّة مثيلات موارد مجتمعة. كحدّ أدنى تعرّف $schema وresources، وتكتب لكلّ مثيل name (اسم عرض فريد داخل الوثيقة)، وtype (الاسم المؤهَّل بالكامل للمورد)، وproperties (الحالة المرغوبة).2

# standard-pc.dsc.config.yaml ── الحالة المرغوبة للجهاز القياسي
$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
parameters:
  appMode:
    type: string
    defaultValue: standard
resources:
  - name: وضع تشغيل التطبيق
    type: Microsoft.Windows/Registry
    properties:
      keyPath: HKCU\Software\MyCompany\App
      valueName: Mode
      valueData:
        String: "[parameters('appMode')]"

في هذا المثال جُمع تصريح الفصل 3 في ملفّ، وصار وضع التشغيل معاملاً appMode. يمكن فصل القيم التي تختلف حسب القسم أو البيئة عن متن التكوين. تقلّل parameters وvariables التعريف المكرّر، وتعبّران أيضاً عن قيم ديناميكية. للتعبير تُستخدم مجموعة جزئية من دوال قوالب ARM.2

بنية مستند التكوينيتكوّن مستند التكوين من schema الذي يبيّن مخطّط الوثيقة، وparameters وvariables لامتصاص فروق البيئة، ومصفوفة resources لمثيلات الموارد، ولكلّ مثيل name وtype وpropertiesمستند التكوين (YAML / JSON)$schema: معرّف URI لمخطّط الوثيقةparameters / variablesresources: مصفوفة المثيلاتname وtype وproperties

الشكل 7: فصل مخطّط الوثيقة، وقيم كلّ بيئة، وتصريحات الموارد يجعل قصد الإعداد مقروءاً كبيانات.

ميزة صيرورة التكوين بيانات أنّك تراجع «ما الذي ينبغي ضبطه على هذا الجهاز» كفرق YAML. غير أنّ كونها بيانات لا يعني أنّها غير ضارّة. المورد المشار إليه يغيّر النظام، لذا يلزم أيضاً تأكيد الموثوقية في الفصل 8.8

5.2. تقدّم بالترتيب test ثمّ what-if ثمّ set ثمّ get

قبل التطبيق، أدخل المراقبة حتماً. يبلّغ dsc config test بوجود فرق عن الحالة المرغوبة أو غيابه، ويعرض dsc config set --what-if تنبؤاً دون تغيير.4

أربع خطوات لتطبيق آمنتتأكّد بـ dsc config test الذي لا يغيّر شيئاً من وجود فرق، وتعرض تنبؤ التغيير بخيار what-if لـ dsc config set، ثمّ تطبق بـ set بعد الاقتناع، وتتحقّق من النتيجة بـ get، بهذا الترتيب الآمنdsc config test (وجود الفرق)set --what-if (تنبؤ التغيير)dsc config set (التطبيق)dsc config get (التحقّق من النتيجة)

الشكل 8: انظر الفرق أوّلاً، وتأكّد من تنبؤ التغيير، ثمّ طبّق متى اقتنعت. أخيراً أعد قراءة الحالة الفعلية.

# 1. تأكيد وجود الفرق (بلا تغيير)
dsc config test --file .\standard-pc.dsc.config.yaml

# 2. عرض تنبؤ بما سيتغيّر إن طُبِّق (بلا تغيير)
dsc config set --file .\standard-pc.dsc.config.yaml --what-if

# 3. التطبيق بعد الاقتناع
dsc config set --file .\standard-pc.dsc.config.yaml

# 4. التحقّق من الحالة بعد التطبيق
dsc config get --file .\standard-pc.dsc.config.yaml

ما تراه هنا مختلف في كلّ خطوة. test حكم التطابق، وwhat-if تنبؤ التغيير، وget جلب الحالة الفعلية. إن لم ينفّذ المورد what-if مباشرة يُركَّب التنبؤ من نتيجة test، فلا تخلط التنبؤ بالقياس بعد التطبيق.4

بهذا الترتيب لا تصير تغييرات الإعداد رمية واحدة، بل حكماً في كلّ مرحلة. لا يُستعاض بتساوي المفعول أو what-if عن تأكيد صلاحيات التطبيق وموثوقية المورد.

5.3. إن بدأت من بيئة قائمة، صدّر الموارد الداعمة لـ export

dsc config export مدخل عكسي يكتب البيئة الحالية. إن سردت في وثيقة الدخل الممرَّرة بـ --file موارد تدعم export، أعاد إلى الإخراج القياسي مستند تكوين يتضمّن كلّ المثيلات القائمة لتلك الموارد.9

# تمرير وثيقة دخل تسرد الموارد المستهدفة، وحفظ مستند التكوين الحالي
dsc config export --file .\export-targets.dsc.config.yaml > .\current-state.dsc.config.yaml

ليس كلّ مورد قابلاً للكتابة، وتُعلَن كلّ نوع مورد في وثيقة الدخل مرّة واحدة فقط. اتّخذ الوضع الحاصل نقطة انطلاق، ثمّ قرّر ما تريد إدارته معياراً. export عملية تكتب الحالة الحالية؛ أمّا جعلها الحالة المرغوبة فقرار جهة التشغيل.9

من الحالة الحالية إلى تصريح ما تريد إدارتهسرد موارد تدعم export في وثيقة الدخل يعطي مستند تكوين يتضمّن المثيلات القائمة، وبعد مراجعة محتواه تقرّر جهة التشغيل الحالة التي تُدار معياراًسرد موارد تدعم exportdsc config exportوثيقة تكوين المثيلات القائمةمراجعة المحتوى وتحديد المعيارتصريح الحالة المراد إدارتها

الشكل 9: كتابة الوضع الحالي، والحكم بما يُعتَمد معياراً، مرحلتان منفصلتان.

6. الاستفادة من الأصول القائمة ── المحوّل وWinGet Configuration

6.1. استدعِ موارد PSDSC بالمحوّل المناسب لبيئة التشغيل

حتّى إن كان v3 منتجاً آخر، لا تضيع موارد PSDSC القائمة. يمكن استدعاؤها من مستند تكوين v3 عبر مورد محوّل. تغيّرت الأسماء في DSC 3.2، فطابق إصدار التثبيت بأسماء المصادر.10

بيئة تشغيل المورد القائم اسم المحوّل في DSC 3.2 فما بعده الاسم السابق
PowerShell 7. لاستخدام موارد قائمة على الأصناف Microsoft.Adapter/PowerShell Microsoft.DSC/PowerShell
Windows PowerShell 5.1. لاستخدام موارد توافق MOF وسكربت وغيرها Microsoft.Adapter/WindowsPowerShell Microsoft.Windows/WindowsPowerShell

حتّى إن كان DSC نفسه مستقلّاً عن PowerShell، تعمل الموارد القائمة المستدعاة بالمحوّل في بيئة PowerShell المقابلة. جهة Windows PowerShell تستخدم PSDesiredStateConfiguration 1.1 المضمَّن، وتتعامل مع موارد السكربت والأصناف والثنائي المتوافقة.10

بنية الطبقات حول DSC v3تستدعي طبقة تنسيق مثل winget configure أو Azure Machine Configuration DSC v3، ويستدعي DSC v3 الموارد الأصلية مباشرة وموارد PSDSC القائمة عبر مورد محوّل، بهذه البنية الطبقيةwinget configure وMachine Configurationdsc.exe (DSC v3)موارد أصلية (مثل Registry)مورد المحوّلموارد PSDSC القائمة (أصول PowerShell)

الشكل 10: يستدعي DSC v3 الموارد الأصلية مباشرة، ويستخدم أصول PowerShell القائمة عبر المحوّل.

6.2. في مخطّط v3 لـ WinGet حدّد DSC v3 معالجاً

جهة الاتصال الأخرى WinGet Configuration. ملفّات .winget التي عُرضت في مقالة تجهيز أجهزة PC تستخدم أيضاً، في مخطّط v3، DSC v3 معالجاً. المطلوب WinGet 1.11 فما بعده ومعالج dscv3.11

حدّد dscv3 في metadata.winget.processor.identifier لملفّ التكوين، واكتب resources مباشرة في جذر الوثيقة. المحتوى مستند تكوين DSC v3.

# WinGet Configuration v3 ── المحتوى مستند تكوين DSC v3
$schema: https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/2023/08/config/document.json
metadata:
  winget:
    processor:
      identifier: dscv3
resources:
  - name: وضع تشغيل التطبيق
    type: Microsoft.Windows/Registry
    properties:
      keyPath: HKCU\Software\MyCompany\App
      valueName: Mode
      valueData:
        String: standard

لا يمكن تمرير تنسيق v2 القائم إلى dscv3 كما هو. ملفّات v2 التي تحمل properties.configurationVersion: 0.2.0 وتضع الموارد تحت properties تواصل العمل على المعالج السابق. لوضعها على DSC v3، انقل الصيغة وفق «Convert to v3» في مستودع العيّنات الرسمي.11

إذن فكّر فيما تعيد استخدامه مفصولاً. PSDSC حديث استدعاء الموارد بالمحوّل، وWinGet حديث مواءمة تنسيق ملفّ التكوين والمعالج. تصريح الحالة الذي تتعلّمه في DSC v3 أرضية مشتركة تصل من dsc.exe على جهازك إلى winget configure للتجهيز، ثمّ إلى طبقات إدارة أعلى مثل Machine Configuration.1

7. التشغيل المستمر ── اجعل Git المصدر المعتمد واكشف الانحراف

7.1. أتمِت الكشف أوّلاً، وافصله عن الإصلاح

ضع مستند التكوين في مستودع Git. إن راجعت التغييرات بطلب سحب ثمّ دمجت وطبّقت، أدِر التكوين المرغوب وتاريخ تغييره في المكان نفسه. تنتقل من إدارة تواصل تحديث الإجراءات وحدها إلى إدارة تجعل التصريح القابل للتنفيذ هو المصدر المعتمد.

يُسمّى انحراف الإعداد يدوياً بعد التطبيق عن الحالة المصرَّح بها انحراف التكوين. كشفه تشغيل dsc config test دورياً. لا يغيّر test شيئاً، لذا يمكن فصل الكشف عن الإصلاح. أتمِت الكشف أوّلاً، ولا تُجرِ الإصلاح بـ set إلا بعد تأكيد الفرق.

دورة تشغيل إدارة التكوين انطلاقاً من Gitتراجع مستند التكوين الموضوع في مستودع Git بطلب سحب ثمّ تطبقه، وتكشف الانحراف بـ test دوري عبر جدولة المهام أو CI، ثمّ تؤكّد الفرق وتعود إلى الإصلاح أو تحديث التكوينكشف انحرافالتكوين صحيحالواقع صحيحمستودع Git (مستند التكوين)مراجعة التغيير بطلب سحبالتطبيق بـ dsc config setتشغيل دوري: dsc config testتأكيد الفرق والحكم بالتعاملالإصلاح بـ set

الشكل 11: راجع التصريح ثمّ طبّقه، واكشف الفرق بـ test دوري. أمّا الإصلاح أو تحديث التصريح فيُقرَّر بعد رؤية المحتوى.

ليس الانحراف خطأ دائماً. إن كان نتيجة تغيير لزم في الموقع، لا تُعِد الجهاز بل حدّث مستند التكوين وراجعه وادمجه. وإن كان التصريح صحيحاً فأصلِح بـ set. في الحالين الانضباط نفسه: المصدر المعتمد داخل Git.

7.2. ميّز «تعذّر الفحص» عن «هناك انحراف»

في التشغيل الدوري، المهم ألّا تعدّ مجرّد تشغيل الأمر نجاحاً. المثال التالي يميّز فشل تنفيذ DSC، وخطأ فحص بعض الموارد، والانحراف، ويُنهي كلاً منها برمز غير صفري.

# للتشغيل الدوري: تمييز فشل test نفسه وخطأ المورد والانحراف، وإنهاء الكلّ بغير صفر
$json = dsc config test --file C:\config\standard-pc.dsc.config.yaml
if ($LASTEXITCODE -ne 0 -or -not $json) {
    Write-Error "فشل تنفيذ dsc config test نفسه (رمز الإنهاء: $LASTEXITCODE)"
    exit 2
}
$result = $json | ConvertFrom-Json
if ($result.hadErrors) {
    # فشل تحقّق الوثيقة أو إنهاء غير صفري لبعض الموارد. الفحص لم يكتمل فلا تبلّغ بالسلامة
    Write-Error "فشل فحص بعض الموارد. راجع messages"
    exit 2
}
if ($result.results.result.inDesiredState -contains $false) {
    Write-Error "كُشف انحراف تكوين"
    exit 1
}
تمييز فشل الفحص الدوري عن الانحراففي مثال الفحص الدوري تُراجع رمز إنهاء DSC والإخراج، ثمّ تُراجع أخطاء الفحص بـ hadErrors، وإن كان inDesiredState للنتيجة false يُبلَّغ بانحرافنعملانعملانعملارمز إنهاء DSC والإخراجفشل التنفيذ أو لا إخراج؟فشل الفحص (إنهاء 2)hadErrors؟inDesiredState يساوي false؟كشف انحراف (إنهاء 1)لا فرق في هذا الفحص

الشكل 12: لا تبلّغ عن خطأ الفحص بأنّه «لا فرق». الانحراف نتيجة عدم تطابق الحالة بعد أن أمكن الفحص.

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

7.3. اختر بنية التشغيل الدوري وفق إدارة الجهاز والمنظّمة

ليس لـ DSC v3 LCM، لذا تقرّر على حدة متى ومن يشغّل test. للجهاز تصلح جدولة المهام، ولمجموعات الخوادم عدّاء CI. راجع مقالة تصميم التشغيل غير المراقب.

في المنظّمات التي تجمّع الإدارة نحو Azure، يصير Machine Configuration وعاءً يدير تدقيق إعدادات نظام التشغيل وتطبيقها على أجهزة Azure الافتراضية وخوادم الموقع عبر Azure Arc.12 تختار تشغيل الأمر على الجهاز دورياً، أو وضعه على طبقة إدارة أعلى.

8. ما تؤكّده قبل التطبيق ── صلاحيات التشغيل والأسرار والموثوقية

8.1. افصل إعدادات المستخدم عن إعدادات الجهاز في مرحلة التكوين

يحتاج set الذي يمسّ الجهاز كلّه، مثل HKLM وميزات Windows، ترقية صلاحيات. واستخدام موارد PSDSC من سلالة Windows PowerShell عبر المحوّل يفترض أيضاً التشغيل بامتيازات المسؤول.7

إن فصلت إعدادات المستخدم عن إعدادات الجهاز في مرحلة مستند التكوين، سهل تصميم سياق التنفيذ. لا تكتفِ بأنّ التشغيل التفاعلي نجح؛ أكّد أيضاً المستخدم والصلاحيات عند التشغيل عبر جدولة المهام ونحوها.

فصل سياق التنفيذ وفق هدف التكوينتُفصل إعدادات المستخدم عن إعدادات الجهاز في مستند التكوين، ويُمرَّر التشغيل التفاعلي أو الدوري بعد تأكيد المستخدم المستهدف والصلاحيات اللازمةالإعدادات المراد إدارتهاتكوين على مستوى المستخدمتكوين على مستوى الجهازتأكيد المستخدم المستهدف والصلاحياتتشغيل تفاعلي أو دوري

الشكل 13: لا تكتفِ بتوزيع YAML بالطريقة نفسها؛ قرّر أيضاً بأيّ مستخدم وصلاحيات يُطبَّق هذا التكوين.

8.2. لا تُدخل الأسرار إلى Git، وأكّد حتّى الموارد المشار إليها

مستند التكوين بيانات تُوضَع في Git. لا تكتب كلمات المرور ومفاتيح API مباشرة؛ صمّم جعلها معاملات وتمريرها عند التشغيل. معاملات الفصل 5 مثال لفصل فروق البيئة، وفصل الأسرار عن متن التكوين مهمّ كذلك.

اقرأ محتوى ملفّات .winget ومستندات التكوين المحصولة من مستودعات عامّة قبل تشغيلها. أكّد ليس محتوى الملفّ فقط، بل هل يمكن الوثوق بالموارد المشار إليها. يملك مستند التكوين قدرة تغيير النظام عبر الموارد. هذا تنبيه في الوثائق الرسمية، وشرط تشغيلي لازم.8

9. خلاصة ── من إعدادات صغيرة، اصنع مصدراً معتمداً قابلاً للتنفيذ

إن كنت تبدأ IaC تصريحيّاً لـ Windows الآن، فالخيار Microsoft DSC v3 (dsc.exe). بعد تمييز سلالات DSC الأربع، راقب أوّلاً بـ get وtest المنفردين، ثمّ اجمع في تكوين YAML/JSON. عند التطبيق افصل الحكم والتنبؤ والتطبيق والتأكيد بالترتيب test ثمّ what-if ثمّ set ثمّ get.54

إمكان التطبيق مراراً لأنّك تكتب «الحالة المرغوبة» لا «الإجراءات»، ويتولّى DSC والموارد المقارنة والتطبيق اللازم. موارد PSDSC القائمة يمكن إعادة استخدامها عبر المحوّل، وأصول WinGet تتّصل بعد ترحيل الصيغة إلى مخطّط v3.31011

في التشغيل المستمر افترض أن v3 نفسه بلا LCM. ضع المصدر المعتمد للتكوين في Git، واكشف الانحراف بـ test دوري، فإن صحّ التكوين فأصلِح، وإن صحّ الواقع فحدّث التكوين.1 صمّم أيضاً صلاحيات التشغيل والأسرار وموثوقية المشار إليه مع إجراءات التطبيق.

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

مقالات ذات صلة

مجالات الاستشارة ذات الصلة

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

روابط مرجعيّة

  1. Microsoft Learn, Microsoft Desired State Configuration overview. حول كون DSC v3 منصّة تكوين تصريحية متساوية المفعول تعمل على Linux وmacOS وWindows دون الاعتماد على PowerShell، وعدم تضمّنه LCM (Local Configuration Manager) وتشغيله أمراً دون الإقامة كخدمة، وتوافقه مع موارد PSDSC عبر موارد محوّل، وإمكان التثبيت من مصدر Microsoft Store لـ winget (معرّف الإصدار المستقرّ 9NVTPZWRC6KQ) أو إصدارات GitHub، وكون WinGet وMicrosoft Dev Box وAzure Machine Configuration شركاء مبكّرين لطبقة التنسيق.  2 3 4 5 6 7

  2. Microsoft Learn, DSC configuration documents. حول كون مستند التكوين ملفّ بيانات YAML/JSON يصرّح بالحالة المرغوبة ويتولّى المورد «كيف يُضبَط»، وكون الخاصّيتين المطلوبتين $schema وresources وامتلاك كلّ مثيل name وtype وproperties، وإمكان تقليل التعريف المكرّر والتعبير عن قيم ديناميكية بـ parameters وvariables، ومعالجته بالعمليّات الأربع dsc config get/test/set/export، ودعمه مجموعة جزئية من دوال تعبير قوالب ARM.  2 3 4

  3. Microsoft Learn, dsc resource set. حول اختبار DSC في dsc config set كلّ مثيل حتماً (تنفيذ test للمورد أو اختبار مركَّب) واستدعاء set فقط للمثيلات التي ليست في الحالة المرغوبة، ومقابل ذلك استدعاء dsc resource set المنفرد set دائماً واعتماد وجود اختبار مسبق على set.implementsPretest في بيان المورد، والتوصية بتشغيل dsc resource test قبل set للموارد بلا implementsPretest.  2 3 4

  4. Microsoft Learn, dsc config set. حول كون dsc config set الأمر الذي يطبّق الحالة المرغوبة في مستند التكوين على النظام، وإمكان خيار –what-if عرض تنبؤ بـ «ماذا سيتغيّر وكيف لو شُغِّل» دون إجراء تغيير فعلاً. ومعه DSC Resource manifest whatIf property حول إنشاء هذه المعلومات تركيباً من نتيجة test عندما لا ينفّذ المورد سلوك what-if مباشرة.  2 3 4

  5. Microsoft Learn, Desired State Configuration (DSC) Overview. حول وجود أربعة إصدارات لـ DSC (PSDSC 1.1 المضمَّن في Windows PowerShell 5.1، وPSDSC 2.0 لـ PowerShell 7، ومعاينة PSDSC 3.0 المستخدمة لدعم Linux في Azure Machine Configuration، وMicrosoft DSC 3.0 كمنتج مستقلّ لا يعتمد على PowerShell)، وكون Microsoft DSC 3.0 الدعم الحقيقي متعدّد المنصّات مع إمكان استخدام موارد PSDSC القائمة.  2

  6. Microsoft Learn, DSC Resources. حول كون المورد واجهة موحَّدة لهدف تكوين تكتب بها نحواً تصريحياً «ماذا ينبغي أن تكون الحالة» فيتولّى المورد «كيف يُضبَط»، وامتلاكه دائماً عمليّتَي Get وTest ودعم معظم الموارد الفرض بـ Set أيضاً، وتحديد المورد باسم نوع مؤهَّل بالكامل (owner.group.area/name)، وإمكان موارد المحوّل استخدام موارد ليست من نوع الأمر. 

  7. Microsoft Learn, Get started with DSC. حول تدفّق الدخول باكتشاف الموارد والاستدعاء المنفرد وإدارة مستند التكوين، والعمليّات المنفردة get وtest وset لمورد Microsoft.Windows/Registry، والتحقّق والتطبيق والتأكيد بـ dsc config test/set/get، وضرورة طرف مسؤول عند التعامل مع موارد PSDSC من سلالة Windows PowerShell.  2 3

  8. Microsoft Learn, configure command (winget). حول كون winget configure الأمر الذي يعدّ الجهاز إلى حالة مرغوبة بملفّ WinGet Configuration، والتحذير بضرورة تأكيد محتوى الملفّ والتحقّق من موثوقية الموارد المرتبطة قبل التشغيل، وإمكان الأوامر الفرعية show/list/test/validate/export عرض محتوى الملفّ وقائمة التكوينات المطبَّقة ومطابقة الحالة الحالية بالمرغوبة والتحقّق من الملفّ وتصدير التكوين.  2

  9. Microsoft Learn, dsc config export. حول توليد أمر export الفرعي مستند تكوين يعرّف كلّ المثيلات القائمة للموارد المدرجة في وثيقة الدخل الممرَّرة بـ –file أو –input وإعادته، واقتصار ما يمكن تحديده في وثيقة الدخل على موارد تملك قسم export في البيان، والإعلان عن كلّ نوع مورد مرّة واحدة فقط.  2

  10. Microsoft Learn, Microsoft.Adapter/WindowsPowerShell. حول تمكين مورد المحوّل اكتشاف موارد PSDSC المتوافقة مع Windows PowerShell 5.1 (سكربت وأصناف وثنائيات) واستدعائها من DSC v3، واستخدام وحدة PSDesiredStateConfiguration 1.1 المضمَّنة، واستبدال هذا الاسم محوّل Microsoft.Windows/WindowsPowerShell التقليدي في DSC 3.2، واستخدام Microsoft.Adapter/PowerShell (سابقاً Microsoft.DSC/PowerShell) لموارد الأصناف على PowerShell 7.  2 3

  11. Microsoft Learn, WinGet Configuration file v3 schema reference. حول استخدام مخطّط v3 لـ WinGet Configuration DSC v3 معالجاً، والحاجة إلى WinGet 1.11 فما بعده ومعالج dscv3 (يُثبَّت تلقائياً حزمة منفصلة Microsoft.DesiredStateConfiguration)، وتحديد dscv3 في metadata.winget.processor.identifier وكتابة resources مباشرة في جذر الوثيقة، ووجود دليل تحويل من تنسيق v2 في مستودع العيّنات الرسمي.  2 3

  12. Microsoft Learn, Understanding Azure Machine Configuration. حول تمكين ميزة Machine Configuration في Azure Policy التدقيق (audit) والتكوين (configure) لإعدادات داخل نظام التشغيل على أجهزة Azure الافتراضية وخوادم Azure Arc إدارةً مُدارة. 

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

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

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

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

يبدو أن لـ DSC عدّة إصدارات. أيّها أستخدم؟
إن كنت تبدأ إدارة تكوين تصريحية الآن فاستخدم Microsoft DSC v3 (dsc.exe). لـ DSC أربع سلالات: PSDSC v1.1 المضمَّن في Windows PowerShell 5.1، وPSDSC v2 كوحدة لـ PowerShell 7، وPSDSC v3 (معاينة) المستخدم لدعم Linux في Azure Machine Configuration، وMicrosoft DSC v3 المعاد كتابته أمراً مستقلّاً لا يعتمد على PowerShell. v3 متعدّد المنصّات، ويكتب التكوين بيانات YAML/JSON لا سكربتات PowerShell، ويمكنه إعادة استخدام موارد PSDSC القائمة عبر محوّلات. عند البحث، إضافة «DSC v3» أو «dsc.exe» تسهّل فصل النتائج عن مواد الأجيال الأقدم.
ما الفرق بين DSC v3 وسكربت إجراءات (BAT أو PowerShell)؟
يصف سكربت الإجراءات «الخطوات المراد تنفيذها»، لذا عليك بناء تساوي المفعول بنفسك لتتجنّب التطبيق المزدوج أو الأخطاء في التشغيل الثاني. يكتب DSC «الحالة المرغوبة» بيانات، وتتولّى الموارد المقارنة بالحالة الحالية (test) وتطبيق الفرق (set). مهما كرّرت تشغيل مستند التكوين نفسه لا يفعل شيئاً للبنود التي هي أصلاً في الحالة المرغوبة، لذا يمكنك التوزيع وإعادة التشغيل دون القلق من عدد التشغيلات. ولأن التكوين بيانات YAML، تكون مراجعات الفرق وتاريخ الإصدارات في Git أسهل بكثير ممّا مع السكربتات.
هل ستضيع موارد PowerShell DSC القائمة وأصول WinGet Configuration؟
لا. يستطيع DSC v3 استدعاء موارد PSDSC القائمة القائمة على الأصناف وعلى MOF عبر موارد محوّل (Microsoft.Adapter/PowerShell وMicrosoft.Adapter/WindowsPowerShell في DSC 3.2 فما بعده؛ وMicrosoft.DSC/PowerShell وMicrosoft.Windows/WindowsPowerShell قبل ذلك). ويستخدم WinGet Configuration، من مخطّط v3 (WinGet 1.11 فما بعده)، DSC v3 معالجاً له. تواصل ملفّات .winget بتنسيق v2 العمل على المعالج السابق، لكن لوضعها على معالج DSC v3 تحتاج تحويلها إلى تنسيق v3 باتّباع دليل التحويل الرسمي.
كيف أُنفذ تكويناً «باستمرار» بـ DSC v3؟
DSC v3 نفسه أداة تُشغَّل أمراً؛ ليس له وكيل مقيم ولا آلية إصلاح تلقائي مثل LCM (Local Configuration Manager) في v1.1. إن احتجت تطبيقاً وتدقيقاً مستمرّين، فإمّا ابنِ كشف انحرافك بتشغيل dsc config test دورياً من Task Scheduler أو CI، أو ضعه على طبقة تنسيق مثل Azure Machine Configuration (التي يمكنها أيضاً تغطية خوادم في الموقع عبر Azure Arc).
أتردّد في تشغيل dsc config set مباشرة. هل يمكنني فحص الأثر مسبقاً؟
نعم. تشغيل dsc config test يُظهر أيّ مثيلات موارد ليست في الحالة المرغوبة، بلا إجراء تغييرات. إضافة إلى ذلك يملك dsc config set خيار --what-if الذي يعرض تنبؤاً بـ «ماذا سيتغيّر، وكيف، لو شُغِّل هذا» دون تغيير شيء فعلاً. افحص الفروق بـ test و--what-if أوّلاً، وشغّل set فقط متى اقتنعت؛ ذلك التسلسل آمن.

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

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

غو كومورا

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

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

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