استخدام Import-DSCResource
Import-DSCResource
هي كلمة أساسية ديناميكية، والتي يمكن استخدامها فقط داخل كتلة البرنامج النصي للتكوين لاستيراد أي موارد مطلوبة في التكوين الخاص بك. يتم استيراد الموارد الموجودة ضمن $PSHOME
تلقائيا، ولكن لا يزال من الأفضل استيراد جميع الموارد المستخدمة في التكوين بشكل صريح.
يظهر بناء الجملة ل Import-DSCResource
أدناه. عند تحديد الوحدات حسب الاسم، من المتطلبات سرد كل منها في سطر جديد.
Import-DscResource [-Name <ResourceName(s)>] [-ModuleName <ModuleName>] [-ModuleVersion <ModuleVersion>]
المعلمات
-
-Name
- اسم (أسماء) مورد DSC الذي يجب استيراده. إذا تم تحديد اسم الوحدة النمطية، يبحث الأمر عن موارد DSC هذه داخل هذه الوحدة النمطية؛ وإلا يبحث الأمر في موارد DSC في جميع مسارات موارد DSC. يتم دعم أحرف البدل. -
-ModuleName
- اسم الوحدة النمطية أو مواصفات الوحدة النمطية. إذا حددت موارد للاستيراد من وحدة نمطية، فسيحاول الأمر استيراد هذه الموارد فقط. إذا قمت بتحديد الوحدة النمطية فقط، يقوم الأمر باستيراد جميع موارد DSC في الوحدة النمطية. -
-ModuleVersion
- بدءا من PowerShell 5.0، يمكنك تحديد إصدار الوحدة النمطية التي يجب أن يستخدمها التكوين. لمزيد من المعلومات، راجع استيراد إصدار معين من مورد مثبت.
Import-DscResource -ModuleName xActiveDirectory
مثال: استخدام Import-DSCResource داخل تكوين
Configuration MSDSCConfiguration
{
# Search for and imports Service, File, and Registry from the module PSDesiredStateConfiguration.
Import-DSCResource -ModuleName PSDesiredStateConfiguration -Name Service, File, Registry
# Search for and import Resource1 from the module that defines it.
# If only –Name parameter is used then resources can belong to different PowerShell modules as well.
# TimeZone resource is from the ComputerManagementDSC module which is not installed by default.
# As a best practice, list each requirement on a different line if possible. This makes reviewing
# multiple changes in source control a bit easier.
Import-DSCResource -Name File
Import-DSCResource -Name TimeZone
# Search for and import all DSC resources inside the module PSDesiredStateConfiguration.
# When specifying the modulename parameter, it is a requirement to list each on a new line.
Import-DSCResource -ModuleName PSDesiredStateConfiguration
# In PowerShell 5.0 and later, you can specify a ModuleVersion parameter
Import-DSCResource -ModuleName ComputerManagementDsc -ModuleVersion 6.0.0.0
...
ملاحظة
تحديد قيم متعددة لأسماء الموارد وأسماء الوحدات النمطية في نفس الأمر غير مدعوم. يمكن أن يكون له سلوك غير محدد حول المورد الذي سيتم تحميله من الوحدة النمطية في حالة وجود نفس المورد في وحدات نمطية متعددة. سيؤدي الأمر أدناه إلى حدوث خطأ أثناء التحويل البرمجي.
Import-DscResource -Name UserConfigProvider*,TestLogger1 -ModuleName UserConfigProv,PsModuleForTestLogger
الأمور التي يجب مراعاتها عند استخدام معلمة الاسم فقط:
- وهي عملية كثيفة الموارد اعتمادا على عدد الوحدات النمطية المثبتة على الجهاز.
- سيقوم بتحميل المورد الأول الذي تم العثور عليه بالاسم المحدد. في حالة وجود أكثر من مورد واحد بنفس الاسم مثبت، يمكن تحميل المورد الخطأ.
الاستخدام الموصى به هو تحديد –ModuleName
مع المعلمة -Name
، كما هو موضح أدناه.
هذا الاستخدام له المزايا التالية:
- يقلل من تأثير الأداء عن طريق الحد من نطاق البحث للمورد المحدد.
- يحدد صراحة الوحدة النمطية التي تحدد المورد، ما يضمن تحميل المورد الصحيح.
ملاحظة
في PowerShell 5.0، يمكن أن تحتوي موارد DSC على إصدارات متعددة، ويمكن تثبيت الإصدارات على كمبيوتر جنبا إلى جنب. يتم تنفيذ ذلك عن طريق وجود إصدارات متعددة من وحدة الموارد المضمنة في نفس مجلد الوحدة النمطية. لمزيد من المعلومات، راجع استخدام الموارد مع إصدارات متعددة.
Intellisense مع Import-DSCResource
عند تأليف تكوين DSC في ISE، يوفر PowerShell IntelliSense للموارد وخصائص الموارد. يتم تحميل تعريفات الموارد ضمن $pshome
مسار الوحدة النمطية تلقائيا.
عند استيراد الموارد باستخدام Import-DSCResource
الكلمة الأساسية، تتم إضافة تعريفات الموارد المحددة ويتم توسيع Intellisense لتضمين مخطط المورد المستورد.
ملاحظة
بدءا من PowerShell 5.0، تمت إضافة إكمال علامة التبويب إلى ISE لموارد DSC وخصائصها. لمزيد من المعلومات، راجع المورد
عند تحويل التكوين برمجيا، يستخدم PowerShell تعريفات الموارد المستوردة للتحقق من صحة جميع كتل الموارد في التكوين. يتم التحقق من صحة كل كتلة مورد، باستخدام تعريف مخطط المورد، للقواعد التالية.
- يتم استخدام الخصائص المحددة في المخطط فقط.
- أنواع البيانات لكل خاصية صحيحة.
- يتم تحديد خصائص المفاتيح.
- لا يتم استخدام خاصية للقراءة فقط.
- التحقق من صحة أنواع خرائط القيمة.
ضع في اعتبارك التكوين التالي:
Configuration SchemaValidationInCorrectEnumValue
{
# It is best practice to explicitly import all resources used in your Configuration.
# This includes resources that are imported automatically, like WindowsFeature.
Import-DSCResource -Name WindowsFeature
Node localhost
{
WindowsFeature ROLE1
{
Name = "Telnet-Client"
Ensure = "Invalid"
}
}
}
يؤدي تجميع هذا التكوين إلى حدوث خطأ.
PSDesiredStateConfiguration\WindowsFeature: At least one of the values 'Invalid' is not supported or
valid for property 'Ensure' on class 'WindowsFeature'. Please specify only supported values:
Present, Absent.
يتيح لك Intellisense والتحقق من صحة المخطط التقاط المزيد من الأخطاء أثناء وقت التحليل والتحويل البرمجي، وتجنب المضاعفات في وقت التشغيل.
ملاحظة
يمكن أن يكون لكل مورد DSC اسم واسم مألوف محدد بواسطة مخطط المورد. فيما يلي أول سطرين من "MSFT_ServiceResource.shema.mof".
[ClassVersion("1.0.0"),FriendlyName("Service")]
class MSFT_ServiceResource : OMI_BaseResource
عند استخدام هذا المورد في تكوين، يمكنك تحديد MSFT_ServiceResource أو الخدمة.
اختلافات PowerShell v4 وv5
هناك اختلافات متعددة تراها عند تأليف التكوينات في PowerShell 4.0 مقابل PowerShell 5.0 والإصدارات الأحدث. سيسلط هذا القسم الضوء على الاختلافات التي تراها ذات صلة بهذه المقالة.
إصدارات موارد متعددة
لم يتم دعم تثبيت واستخدام إصدارات متعددة من الموارد جنبا إلى جنب في PowerShell 4.0. إذا لاحظت مشكلات في استيراد الموارد إلى التكوين الخاص بك، فتأكد من تثبيت إصدار واحد فقط من المورد.
في الصورة أدناه، يتم تثبيت إصدارين من الوحدة النمطية xPSDesiredStateConfiguration .
انسخ محتويات إصدار الوحدة النمطية المطلوب إلى المستوى الأعلى من دليل الوحدة النمطية.
موقع المورد
عند تأليف التكوينات وتحويلها برمجيا، يمكن تخزين مواردك في أي دليل محدد بواسطة PSModulePath الخاص بك.
في PowerShell 4.0، يتطلب LCM تخزين جميع وحدات موارد DSC ضمن "ملفات البرنامج\WindowsPowerShell\Modules" أو $pshome\Modules
. بدءا من PowerShell 5.0، تمت إزالة هذا المطلب، ويمكن تخزين وحدات الموارد في أي دليل يحدده PSModulePath
.
تمت إضافة ModuleVersion
بدءا من PowerShell 5.0، تسمح لك المعلمة -ModuleVersion
بتحديد إصدار الوحدة النمطية الذي يجب استخدامه داخل التكوين الخاص بك.