أفضل ممارسات خادم السحب

ينطبق على: Windows PowerShell 4.0، Windows PowerShell 5.0

هام

خادم السحب (Windows Feature DSC-Service) هو مكون مدعوم من Windows Server ولكن لا توجد خطط لتقديم ميزات أو قدرات جديدة. نود أن تعرف أن إصدارا أحدث من DSC متاح الآن بشكل عام، تتم إدارته بواسطة ميزة Azure Policy المسماة تكوين الضيف. تجمع خدمة تكوين الضيف ميزات ملحق DSC وAzure Automation State Configuration والميزات الأكثر شيوعاً المطلوبة من ملاحظات العملاء. يتضمن تكوين الضيف أيضاً دعم الجهاز المختلط من خلال الخوادم الممكنة بواسطة Arc.

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

  • الكاتب: مايكل غرين
  • المراجعون: بن جيلينز، رافيكانث شاغانتي، ألكسندر نيكوليتش
  • تاريخ النشر: أبريل 2015

الملخص

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

القسمان الرئيسيان من هذا المستند:

  • تخطيط التكوين
  • دليل التثبيت

إصدارات إطار عمل إدارة Windows

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

Windows PowerShell تكوين الحالة المطلوبة

تكوين الحالة المطلوبة (DSC) هو نظام أساسي للإدارة يتيح نشر بيانات التكوين وإدارتها باستخدام بناء جملة صناعي يسمى تنسيق الكائن المدار (MOF) لوصف نموذج المعلومات العامة (CIM). يوجد مشروع مصدر مفتوح، Open Management Infrastructure (OMI)، لزيادة تطوير هذه المعايير عبر الأنظمة الأساسية بما في ذلك Linux وأنظمة تشغيل أجهزة الشبكة. لمزيد من المعلومات، راجع صفحة DMTF التي ترتبط بمواصفات MOFومستندات OMI والمصدر.

يوفر Windows PowerShell مجموعة من ملحقات اللغة لتكوين الحالة المطلوبة التي يمكنك استخدامها لإنشاء التكوينات التعريفية وإدارتها.

سحب دور الخادم

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

يمكن نشر دور خادم السحب إما كمثيل خادم ويب أو مشاركة ملف SMB. تتضمن إمكانية خادم الويب واجهة OData ويمكن أن تتضمن اختياريا قدرات العقد المستهدفة للإبلاغ مرة أخرى عن تأكيد النجاح أو الفشل عند تطبيق التكوينات. هذه الوظيفة مفيدة في البيئات التي يوجد فيها عدد كبير من العقد المستهدفة. بعد تكوين عقدة هدف (يشار إليها أيضا باسم العميل) للإشارة إلى خادم السحب، يتم تنزيل أحدث بيانات التكوين وأي برامج نصية مطلوبة وتطبيقها. يمكن أن يحدث هذا كنشر لمرة واحدة أو كمهمة إعادة حدوث مما يجعل أيضا خادم السحب أحد الأصول المهمة لإدارة التغيير على نطاق واسع. لمزيد من المعلومات، راجع أوضاع تكوين الدفع والسحب.

تخطيط التكوين

بالنسبة لأي توزيع لبرامج المؤسسة، هناك معلومات يمكن جمعها مسبقا للمساعدة في التخطيط للبنية الصحيحة والاستعداد للخطوات المطلوبة لإكمال النشر. توفر الأقسام التالية معلومات حول كيفية التحضير والاتصالات التنظيمية التي من المحتمل أن تحدث مسبقا.

متطلبات البرنامج

يتطلب نشر خادم سحب ميزة خدمة DSC ل Windows Server. تم تقديم هذه الميزة في Windows Server 2012، وتم تحديثها من خلال الإصدارات المستمرة من إطار عمل إدارة Windows (WMF).

تنزيلات البرامج

بالإضافة إلى تثبيت أحدث محتوى من Windows Update، هناك تنزيلان يعتبران من أفضل الممارسات لنشر خادم سحب DSC: أحدث إصدار من إطار عمل إدارة Windows، ووحدة DSC لأتمتة توفير خادم السحب.

مورد DSC

يمكن تبسيط توزيع خادم السحب عن طريق توفير الخدمة باستخدام برنامج نصي لتكوين DSC. يتضمن هذا المستند برامج نصية للتكوين يمكن استخدامها لتوزيع عقدة خادم جاهزة للإنتاج. لاستخدام البرامج النصية للتكوين، يلزم وجود وحدة DSC غير مضمنة في Windows Server. اسم الوحدة النمطية المطلوب هو xPSDesiredStateConfiguration، والذي يتضمن مورد DSC xDscWebService. يمكن تنزيل الوحدة النمطية xPSDesiredStateConfiguration من معرض PowerShell.

Install-Module استخدم cmdlet من وحدة PowerShellGet.

Install-Module xPSDesiredStateConfiguration

ستقوم وحدة PowerShellGet بتنزيل الوحدة النمطية إلى:

C:\Program Files\Windows PowerShell\Modules

مهمة التخطيط

  • هل لديك حق الوصول إلى ملفات التثبيت ل Windows Server 2012 R2؟
  • هل ستتوفر لبيئة النشر إمكانية الوصول إلى الإنترنت لتنزيل WMF والوحدة النمطية من المعرض عبر الإنترنت؟
  • كيف ستقوم بتثبيت آخر تحديثات الأمان بعد تثبيت نظام التشغيل؟
  • هل سيكون للبيئة إمكانية الوصول إلى الإنترنت للحصول على التحديثات، أم سيكون لديها خادم خادم Windows Server Update Services محلي (WSUS)؟
  • هل لديك حق الوصول إلى ملفات تثبيت Windows Server التي تتضمن بالفعل تحديثات من خلال الحقن دون اتصال؟

متطلبات الأجهزة

يتم دعم عمليات نشر خادم السحب على كل من الخوادم الفعلية والظاهرية. تتوافق متطلبات تغيير الحجم لخادم السحب مع متطلبات Windows Server 2012 R2.

  • وحدة المعالجة المركزية: معالج 64 بت 1.4 غيغاهرتز
  • الذاكرة: 512 ميغابايت
  • مساحة القرص: 32 غيغابايت
  • الشبكة: محول Gigabit Ethernet

مهمة التخطيط

  • هل ستقوم بالتوزيع على الأجهزة الفعلية أو على نظام ظاهري؟
  • ما هي عملية طلب خادم جديد للبيئة المستهدفة؟
  • ما متوسط وقت التحول للخادم ليصبح متاحا؟
  • ما خادم الحجم الذي ستطلبه؟

الحسابات

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

سجلات DNS

ستحتاج إلى اسم خادم لاستخدامه عند تكوين العملاء للعمل مع بيئة خادم السحب. في بيئات الاختبار، عادة ما يتم استخدام اسم مضيف الخادم، أو يمكن استخدام عنوان IP للخادم إذا لم يكن تحليل اسم DNS متوفرا. في بيئات الإنتاج أو في بيئة معملية تهدف إلى تمثيل توزيع الإنتاج، فإن أفضل الممارسات هي إنشاء سجل DNS CNAME.

يسمح لك DNS CNAME بإنشاء اسم مستعار للإشارة إلى سجل المضيف (A). الهدف من سجل الاسم الإضافي هو زيادة المرونة في حالة الحاجة إلى تغيير في المستقبل. يمكن أن يساعد CNAME في عزل تكوين العميل بحيث لا تتطلب التغييرات التي تطرأ على بيئة الخادم، مثل استبدال خادم سحب أو إضافة خوادم سحب إضافية، تغييرا مطابقا لتكوين العميل.

عند اختيار اسم لسجل DNS، ضع بنية الحل في الاعتبار. إذا كنت تستخدم موازنة التحميل، فستحتاج الشهادة المستخدمة لتأمين نسبة استخدام الشبكة عبر HTTPS إلى مشاركة نفس اسم سجل DNS.

أفضل ممارسات السيناريو

  • بيئة الاختبار - إعادة إنتاج بيئة الإنتاج المخطط لها، إن أمكن. اسم مضيف الخادم مناسب للتكوينات البسيطة. إذا لم يكن DNS متوفرا، فقد يتم استخدام عنوان IP بدلا من اسم مضيف.
  • نشر عقدة واحدة - إنشاء سجل DNS CNAME يشير إلى اسم مضيف الخادم.

لمزيد من المعلومات، راجع تكوين DNS Round Robin في Windows Server.

مهمة التخطيط

  • هل تعرف من يجب الاتصال به لإنشاء سجلات DNS وتغييرها؟
  • ما هو متوسط الحل البديل لطلب سجل DNS؟
  • هل تحتاج إلى طلب سجلات اسم المضيف الثابت (A) للخوادم؟
  • ما الذي ستطلبه ك CNAME؟
  • إذا لزم الأمر، ما نوع حل موازنة التحميل الذي ستستخدمه؟ (راجع القسم بعنوان موازنة التحميل للحصول على التفاصيل)

البنية الأساسية للمفتاح العام

تتطلب معظم المؤسسات اليوم التحقق من صحة نسبة استخدام الشبكة، خاصة نسبة استخدام الشبكة التي تتضمن بيانات حساسة مثل كيفية تكوين الخوادم، و/أو تشفيرها أثناء النقل. في حين أنه من الممكن نشر خادم سحب باستخدام HTTP الذي يسهل طلبات العميل في نص واضح، فمن أفضل الممارسات تأمين نسبة استخدام الشبكة باستخدام HTTPS. يمكن تكوين الخدمة لاستخدام HTTPS باستخدام مجموعة من المعلمات في مورد DSC xPSDesiredStateConfiguration.

لا تختلف متطلبات الشهادة لتأمين حركة مرور HTTPS لخادم السحب عن تأمين أي موقع ويب HTTPS آخر. قالب خادم الويب في خدمات شهادات Windows Server يفي بالقدرات المطلوبة.

مهمة التخطيط

  • إذا لم تكن طلبات الشهادة تلقائية، فمن الذي ستحتاج إلى الاتصال به لطلب شهادة؟
  • ما هو متوسط التحول للطلب؟
  • كيف سيتم نقل ملف الشهادة إليك؟
  • كيف سيتم نقل المفتاح الخاص للشهادة إليك؟
  • كم من الوقت هو وقت انتهاء الصلاحية الافتراضي؟
  • هل استقريت على اسم DNS لبيئة خادم السحب، والتي يمكنك استخدامها لاسم الشهادة؟

اختيار بنية

يمكن نشر خادم سحب باستخدام إما خدمة ويب مستضافة على IIS أو مشاركة ملف SMB. في معظم الحالات، سيوفر خيار خدمة الويب مرونة أكبر. ليس من غير المألوف أن تجتاز حركة مرور HTTPS حدود الشبكة، بينما غالبا ما تتم تصفية نسبة استخدام الشبكة SMB أو حظرها بين الشبكات. توفر خدمة الويب أيضا خيار تضمين خادم التوافق أو مدير تقارير الويب (كلا الموضوعين المطلوب معالجتهما في إصدار مستقبلي من هذا المستند) التي توفر آلية للعملاء للإبلاغ عن الحالة مرة أخرى إلى خادم للرؤية المركزية. يوفر SMB خيارا للبيئات التي يفرض فيها النهج عدم استخدام خادم الويب، والمتطلبات البيئية الأخرى التي تجعل دور خادم الويب غير مرغوب فيه. في كلتا الحالتين، تذكر تقييم متطلبات توقيع وتشفير نسبة استخدام الشبكة. تعد نهج HTTPS وتوقيع SMB وIPSEC جميعها خيارات تستحق النظر فيها.

موازنة التحميل

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

مهمة التخطيط

  • ما الحل الذي سيتم استخدامه لموازنة التحميل عبر الخوادم؟
  • إذا كنت تستخدم موازن تحميل الأجهزة، فمن سيطلب إضافة تكوين جديد إلى الجهاز؟
  • ما هو متوسط الحل البديل لطلب تكوين خدمة ويب جديدة متوازنة التحميل؟
  • ما هي المعلومات المطلوبة للطلب؟
  • هل ستحتاج إلى طلب عنوان IP إضافي أم سيتعامل الفريق المسؤول عن موازنة التحميل مع ذلك؟
  • هل لديك سجلات DNS المطلوبة، وهل سيكون هذا مطلوبا من قبل الفريق المسؤول عن تكوين حل موازنة التحميل؟
  • هل يتطلب حل موازنة التحميل معالجة PKI من قبل الجهاز أو يمكنه موازنة تحميل حركة مرور HTTPS طالما لا توجد متطلبات جلسة عمل؟

تكوينات التقسيم المرحلي والوحدات النمطية على خادم السحب

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

في المستقبل، سيتم توسيع هذا القسم وتضمينه في دليل العمليات لخادم سحب DSC. سيناقش الدليل العملية اليومية لإدارة الوحدات والتكوينات بمرور الوقت باستخدام الأتمتة.

وحدات DSC

سيحتاج العملاء الذين يطلبون تكوينا إلى وحدات DSC المطلوبة. وظيفة خادم السحب هي أتمتة التوزيع عند الطلب على وحدات DSC للعملاء. إذا كنت تقوم بنشر خادم سحب للمرة الأولى، ربما كمختبر أو إثبات للمفهوم، فمن المحتمل أن تعتمد على وحدات DSC المتوفرة من المستودعات العامة مثل معرض PowerShell أو مستودعات GitHub PowerShell.org لوحدات DSC النمطية.

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

يجب حزم كل وحدة بتنسيق معين، ملف ZIP يسمى ModuleName_Version.zip يحتوي على حمولة الوحدة النمطية. بعد نسخ الملف إلى الخادم، يجب إنشاء ملف المجموع الاختباري. عندما يتصل العملاء بالخادم، يتم استخدام المجموع الاختباري للتحقق من عدم تغيير محتوى الوحدة النمطية DSC منذ نشرها.

New-DscChecksum -ConfigurationPath .\ -OutPath .\

مهمة التخطيط

  • إذا كنت تخطط لبيئة اختبار أو مختبر ما هي السيناريوهات الرئيسية للتحقق من صحتها؟
  • هل هناك وحدات نمطية متاحة للجمهور تحتوي على موارد لتغطية كل ما تحتاجه أم ستحتاج إلى تأليف مواردك الخاصة؟
  • هل ستتوفر لبيئتك إمكانية الوصول إلى الإنترنت لاسترداد الوحدات النمطية العامة؟
  • من سيكون مسؤولا عن مراجعة وحدات DSC؟
  • إذا كنت تخطط لبيئة إنتاج ما الذي ستستخدمه كمستودع محلي لتخزين وحدات DSC النمطية؟
  • هل سيقبل الفريق المركزي وحدات DSC النمطية من فرق التطبيقات؟ ماذا ستكون العملية؟
  • هل ستقوم بأتمتة التعبئة والتغليف والنسخ وإنشاء المجموع الاختباري لوحدات DSC الجاهزة للإنتاج إلى الخادم، من مستودع المصدر الخاص بك؟
  • هل سيكون فريقك مسؤولا عن إدارة النظام الأساسي للأتمتة أيضا؟

تكوينات DSC

الغرض من خادم السحب هو توفير آلية مركزية لتوزيع تكوينات DSC على عقد العميل. يتم تخزين التكوينات على الخادم كمستندات MOF. ستتم تسمية كل مستند ب Guid فريد. عند تكوين العملاء للاتصال بخادم سحب، يتم منحهم أيضا Guid للتكوين الذي يجب أن يطلبوه. يضمن هذا النظام من تكوينات الإشارة بواسطة Guid التفرد العالمي ومرنا بحيث يمكن تطبيق التكوين بدقة لكل عقدة، أو كتكوين دور يمتد عبر العديد من الخوادم التي يجب أن يكون لها تكوينات متطابقة.

Guids

يستحق التخطيط للتكوين Guids اهتماما إضافيا عند التفكير من خلال نشر خادم السحب. لا يوجد متطلبات محددة لكيفية التعامل مع Guids ومن المحتمل أن تكون العملية فريدة لكل بيئة. يمكن أن تتراوح العملية من بسيط إلى معقد: ملف CSV مخزن مركزيا أو جدول SQL بسيط أو CMDB أو حل معقد يتطلب التكامل مع أداة أخرى أو حل برنامج آخر. هناك نهجان عامان:

  • تعيين المعرف الفريد العمومي لكل خادم — يوفر مقياسا للتأكد من أن كل تكوين خادم يتم التحكم فيه بشكل فردي. يوفر هذا مستوى من الدقة حول التحديثات ويمكن أن يعمل بشكل جيد في البيئات التي بها عدد قليل من الخوادم.

  • تعيين Guids لكل دور خادم — تستخدم جميع الخوادم التي تؤدي نفس الوظيفة، مثل خوادم الويب، نفس GUID للإشارة إلى بيانات التكوين المطلوبة. يجب أن تدرك أنه إذا كانت العديد من الخوادم تشترك في نفس GUID، فسيتم تحديثها جميعا في وقت واحد عند تغيير التكوين.

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

مهمة التخطيط

  • من سيكون مسؤولا عن نسخ التكوينات إلى مجلد خادم السحب عندما تكون جاهزة؟
  • إذا تم تأليف التكوينات بواسطة فريق تطبيق، فماذا ستكون العملية لتسليمها؟
  • هل ستستفيد من مستودع لتخزين التكوينات أثناء تأليفها، عبر الفرق؟
  • هل ستقوم بأتمتة عملية نسخ التكوينات إلى الخادم وإنشاء المجموع الاختباري عندما تكون جاهزة؟
  • كيف ستقوم بتعيين Guids إلى الخوادم أو الأدوار، وأين سيتم تخزين هذا؟
  • ما الذي ستستخدمه كعملية لتكوين أجهزة العميل، وكيف ستتكامل مع العملية الخاصة بك لإنشاء المعرف الفريد العمومي للتكوين وتخزينه؟

دليل التثبيت

البرامج النصية الواردة في هذا المستند هي أمثلة مستقرة. راجع البرامج النصية بعناية دائما قبل تنفيذها في بيئة إنتاج.

المتطلبات الأساسية

للتحقق من إصدار PowerShell على الخادم الخاص بك، استخدم الأمر التالي.

$PSVersionTable.PSVersion

إذا كان ذلك ممكنا، قم بالترقية إلى أحدث إصدار من إطار عمل إدارة Windows. بعد ذلك، قم بتنزيل الوحدة النمطية xPsDesiredStateConfiguration باستخدام الأمر التالي.

Install-Module xPSDesiredStateConfiguration

سيطلب الأمر موافقتك قبل تنزيل الوحدة النمطية.

البرامج النصية للتثبيت والتكوين

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

ملاحظة: تتطلب الوحدة النمطية xPSDesiredStateConfiguration DSC حاليا أن يكون الخادم محليا EN-US.

التكوين الأساسي ل Windows Server 2012

# This is a very basic Configuration to deploy a pull server instance in a lab
# environment on Windows Server 2012.

Configuration PullServer {
Import-DscResource -ModuleName xPSDesiredStateConfiguration

        # Load the Windows Server DSC Service feature
        WindowsFeature DSCServiceFeature
        {
          Ensure = 'Present'
          Name = 'DSC-Service'
        }

        # Use the DSC Resource to simplify deployment of the web service
        xDSCWebService PSDSCPullServer
        {
          Ensure = 'Present'
          EndpointName = 'PSDSCPullServer'
          Port = 8080
          PhysicalPath = "$env:SYSTEMDRIVE\inetpub\wwwroot\PSDSCPullServer"
          CertificateThumbPrint = 'AllowUnencryptedTraffic'
          ModulePath = "$env:PROGRAMFILES\WindowsPowerShell\DscService\Modules"
          ConfigurationPath = "$env:PROGRAMFILES\WindowsPowerShell\DscService\Configuration"
          State = 'Started'
          DependsOn = '[WindowsFeature]DSCServiceFeature'
        }
}
PullServer -OutputPath 'C:\PullServerConfig\'
Start-DscConfiguration -Wait -Force -Verbose -Path 'C:\PullServerConfig\'

تكوين متقدم ل Windows Server 2012 R2

# This is an advanced Configuration example for Pull Server production deployments
# on Windows Server 2012 R2. Many of the features demonstrated are optional and
# provided to demonstrate how to adapt the Configuration for multiple scenarios
# Select the needed resources based on the requirements for each environment.
# Optional scenarios include:
#      * Reduce footprint to Server Core
#      * Rename server and join domain
#      * Switch from SSL to TLS for HTTPS
#      * Automatically load certificate from Certificate Authority
#      * Locate Modules and Configuration data on remote SMB share
#      * Manage state of default websites in IIS

param (
        [Parameter(Mandatory=$true)]
        [ValidateNotNullorEmpty()]
        [System.String] $ServerName,
        [System.String] $DomainName,
        [System.String] $CARootName,
        [System.String] $CAServerFQDN,
        [System.String] $CertSubject,
        [System.String] $SMBShare,
        [Parameter(Mandatory=$true)]
        [ValidateNotNullorEmpty()]
        [PsCredential] $Credential
    )

Configuration PullServer {
    Import-DscResource -ModuleName xPSDesiredStateConfiguration, xWebAdministration, xCertificate, xComputerManagement
    Node localhost
    {

        # Configure the server to automatically corret configuration drift including reboots if needed.
        LocalConfigurationManager
        {
            ConfigurationMode = 'ApplyAndAutoCorrect'
            RebootNodeifNeeded = $node.RebootNodeifNeeded
            CertificateId = $node.Thumbprint
        }

        # Remove all GUI interfaces so the server has minimum running footprint.
        WindowsFeature ServerCore
        {
            Ensure = 'Absent'
            Name = 'User-Interfaces-Infra'
        }

        # Set the server name and if needed, join a domain. If not joining a domain, remove the DomainName parameter.
        xComputer DomainJoin
        {
            Name = $Node.ServerName
            DomainName = $Node.DomainName
            Credential = $Node.Credential
        }

        # The next series of settings disable SSL and enable TLS, for environments where that is required by policy.
        Registry TLS1_2ServerEnabled
        {
            Ensure = 'Present'
            Key = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server'
            ValueName = 'Enabled'
            ValueData = 1
            ValueType = 'Dword'
        }

        Registry TLS1_2ServerDisabledByDefault
        {
            Ensure = 'Present'
            Key = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server'
            ValueName = 'DisabledByDefault'
            ValueData = 0
            ValueType = 'Dword'
        }

        Registry TLS1_2ClientEnabled
        {
            Ensure = 'Present'
            Key = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client'
            ValueName = 'Enabled'
            ValueData = 1
            ValueType = 'Dword'
        }

        Registry TLS1_2ClientDisabledByDefault
        {
            Ensure = 'Present'
            Key = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client'
            ValueName = 'DisabledByDefault'
            ValueData = 0
            ValueType = 'Dword'
        }

        Registry SSL2ServerDisabled
        {
            Ensure = 'Present'
            Key = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server'
            ValueName = 'Enabled'
            ValueData = 0
            ValueType = 'Dword'
        }

        # Install the Windows Server DSC Service feature
        WindowsFeature DSCServiceFeature
        {
            Ensure = 'Present'
            Name = 'DSC-Service'
        }

        # If using a certificate from a local Active Directory Enterprise Root Certificate Authority,
        # complete a request and install the certificate
        xCertReq SSLCert
        {
            CARootName = $Node.CARootName
            CAServerFQDN = $Node.CAServerFQDN
            Subject = $Node.CertSubject
            AutoRenew = $Node.AutoRenew
            Credential = $Node.Credential
        }

        # Use the DSC resource to simplify deployment of the web service.  You might also consider
        # modifying the default port, possibly leveraging port 443 in environments where that is
        # enforced as a standard.
        xDSCWebService PSDSCPullServer
        {
            Ensure = 'Present'
            EndpointName = 'PSDSCPullServer'
            Port = 8080
            PhysicalPath = "$env:SYSTEMDRIVE\inetpub\wwwroot\PSDSCPullServer"
            CertificateThumbPrint = 'CertificateSubject'
            CertificateSubject = $Node.CertSubject
            ModulePath = "$($Node.SMBShare)\DscService\Modules"
            ConfigurationPath = "$($Node.SMBShare)\DscService\Configuration"
            State = 'Started'
            DependsOn = '[WindowsFeature]DSCServiceFeature'
        }

        # Validate web config file contains current DB settings
        xWebConfigKeyValue CorrectDBProvider
        {
            ConfigSection = 'AppSettings'
            Key = 'dbprovider'
            Value = 'System.Data.OleDb'
            WebsitePath = 'IIS:\sites\PSDSCPullServer'
            DependsOn = '[xDSCWebService]PSDSCPullServer'
        }
        xWebConfigKeyValue CorrectDBConnectionStr
        {
            ConfigSection = 'AppSettings'
            Key = 'dbconnectionstr'
            Value = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\WindowsPowerShell\DscService\Devices.mdb;'
            WebsitePath = 'IIS:\sites\PSDSCPullServer'
            DependsOn = '[xDSCWebService]PSDSCPullServer'
        }

        # Stop the default website
        xWebsite StopDefaultSite
        {
            Ensure = 'Present'
            Name = 'Default Web Site'
            State = 'Stopped'
            PhysicalPath = 'C:\inetpub\wwwroot'
            DependsOn = '[WindowsFeature]DSCServiceFeature'
        }
    }
}

$configData = @{
    AllNodes = @(
        @{
            NodeName = 'localhost'
            ServerName = $ServerName
            DomainName = $DomainName
            CARootName = $CARootName
            CAServerFQDN = $CAServerFQDN
            CertSubject = $CertSubject
            AutoRenew = $true
            SMBShare = $SMBShare
            Credential = $Credential
            RebootNodeifNeeded = $true
            CertificateFile = 'c:\PullServerConfig\Cert.cer'
            Thumbprint = 'B9A39921918B466EB1ADF2509E00F5DECB2EFDA9'
            }
        )
    }

PullServer -ConfigurationData $configData -OutputPath 'C:\PullServerConfig\'
Set-DscLocalConfigurationManager -ComputerName localhost -Path 'C:\PullServerConfig\'
Start-DscConfiguration -Wait -Force -Verbose -Path 'C:\PullServerConfig\'

# .\Script.ps1 -ServerName web1 -domainname 'test.pha' -carootname 'test-dc01-ca' -caserverfqdn 'dc01.test.pha' -certsubject 'CN=service.test.pha' -smbshare '\\sofs1.test.pha\share'

التحقق من وظيفة خادم السحب

# This function is meant to simplify a check against a DSC pull server. If you do not use the
# default service URL, you will need to adjust accordingly.
function Verify-DSCPullServer ($fqdn) {
    ([xml](Invoke-WebRequest "https://$($fqdn):8080/psdscpullserver.svc" | % Content)).service.workspace.collection.href
}

Verify-DSCPullServer 'INSERT SERVER FQDN'
Expected Result:
Action
Module
StatusReport
Node

تكوين العملاء

Configuration PullClient {
    param(
        $ID,
        $Server
    )
    LocalConfigurationManager
    {
        ConfigurationID = $ID;
        RefreshMode = 'PULL';
        DownloadManagerName = 'WebDownloadManager';
        RebootNodeIfNeeded = $true;
        RefreshFrequencyMins = 30;
        ConfigurationModeFrequencyMins = 15;
        ConfigurationMode = 'ApplyAndAutoCorrect';
        DownloadManagerCustomData = @{
            ServerUrl = "http://"+$Server+":8080/PSDSCPullServer.svc"
            AllowUnsecureConnection = $true
        }
    }
}

PullClient -ID 'INSERTGUID' -Server 'INSERTSERVER' -Output 'C:\DSCConfig\'
Set-DscLocalConfigurationManager -ComputerName 'Localhost' -Path 'C:\DSCConfig\' -Verbose

مراجع ومقتطفات وأمثلة إضافية

يوضح هذا المثال كيفية بدء اتصال عميل يدويا (يتطلب WMF5) للاختبار.

Update-DscConfiguration -Wait -Verbose

يتم استخدام Add-DnsServerResourceRecordName cmdlet لإضافة سجل CNAME نوع إلى منطقة DNS.

تقوم وظيفة PowerShell لإنشاء المجموع الاختباري ونشر DSC MOF إلى SMB Pull Server تلقائيا بإنشاء المجموع الاختباري المطلوب، ثم نسخ كل من تكوين MOF وملفات المجموع الاختباري إلى خادم سحب SMB.

الملحق - فهم أنواع ملفات بيانات خدمة ODATA

يتم تخزين ملف بيانات لإنشاء معلومات أثناء نشر خادم سحب يتضمن خدمة ويب OData. يعتمد نوع الملف على نظام التشغيل، كما هو موضح أدناه.

  • Windows Server 2012 - سيكون نوع الملف دائما .mdb
  • Windows Server 2012 R2 - سيتم تعيين نوع الملف افتراضيا .mdb إلى .edb ما لم يتم تحديد في التكوين

في البرنامج النصي للمثال المتقدم لتثبيت خادم السحب، ستجد أيضا مثالا على كيفية التحكم web.config تلقائيا في إعدادات الملف لمنع أي فرصة للخطأ الناتج عن نوع الملف.