مشاركة عبر


استكشاف أخطاء DSC وإصلاحها

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

توفر هذه المقالة إرشادات استكشاف الأخطاء وإصلاحها للأخطاء الشائعة.

تبعية WinRM

يعتمد Windows PowerShell تكوين الحالة المطلوبة (DSC) على WinRM. لا يتم تمكين WinRM بشكل افتراضي على Windows Server 2008 R2 وWindows 7. قم بتشغيل Set-WSManQuickConfig، في جلسة عمل Windows PowerShell مرتفعة، لتمكين WinRM.

استخدام Get-DscConfigurationStatus

يحصل Get-DscConfigurationStatus cmdlet على معلومات حول حالة التكوين من عقدة هدف. يقوم الأمر بإرجاع كائن غني يتضمن معلومات عالية المستوى حول ما إذا كان تشغيل التكوين ناجحا أم لا. يمكنك البحث في العنصر لاكتشاف تفاصيل حول تشغيل التكوين مثل:

  • كل مورد فشل.
  • أي مورد طلب إعادة التشغيل.
  • Meta-Configuration الإعدادات في وقت تشغيل التكوين.

تقوم مجموعة المعلمات التالية بإرجاع معلومات الحالة لآخر تشغيل للتكوين:

Get-DscConfigurationStatus [-CimSession <CimSession[]>]
                           [-ThrottleLimit <int>]
                           [-AsJob]
                           [<CommonParameters>]

تقوم مجموعة المعلمات التالية بإرجاع معلومات الحالة لكل تشغيل تكوين:

Get-DscConfigurationStatus -All
                           [-CimSession <CimSession[]>]
                           [-ThrottleLimit <int>]
                           [-AsJob]
                           [<CommonParameters>]

مثال

PS C:\> $Status = Get-DscConfigurationStatus

PS C:\> $Status

Status         StartDate                Type            Mode    RebootRequested        NumberOfResources
------        ---------                ----            ----    ---------------        -----------------
Failure        11/24/2015  3:44:56     Consistency        Push    True                36

PS C:\> $Status.ResourcesNotInDesiredState

ConfigurationName     :    MyService
DependsOn             :
ModuleName            :    PSDesiredStateConfiguration
ModuleVersion         :    1.1
PsDscRunAsCredential  :
ResourceID            :    [File]ServiceDll
SourceInfo            :    c:\git\CustomerService\Configs\MyCustomService.ps1::5::34::File
DurationInSeconds     :    0.19
Error                 :    SourcePath must be accessible for current configuration. The related file/directory is:
                           \\Server93\Shared\contosoApp.dll. The related ResourceID is [File]ServiceDll
FinalState            :
InDesiredState        :    False
InitialState          :
InstanceName          :    ServiceDll
RebootRequested       :    False
ResourceName          :    File
StartDate             :    11/24/2015  3:44:56
PSComputerName        :

لن يتم تشغيل البرنامج النصي الخاص بي: استخدام سجلات DSC لتشخيص أخطاء البرنامج النصي

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

أين توجد سجلات أحداث DSC؟

في عارض الأحداث، توجد أحداث DSC في: Applications and Services Logs/Microsoft/Windows/Desired State Configuration

يمكنك تشغيل PowerShell cmdlet المقابل، Get-WinEvent، لعرض سجلات الأحداث:

PS C:\> Get-WinEvent -LogName "Microsoft-Windows-Dsc/Operational"

   ProviderName: Microsoft-Windows-DSC

TimeCreated                     Id LevelDisplayName Message
-----------                     -- ---------------- -------
11/17/2014 10:27:23 PM        4102 Information      Job {02C38626-D95A-47F1-9DA2-C1D44A7128E7} :

اسم السجل الأساسي ل DSC هو Microsoft-Windows-DSC>> (لا تظهر أسماء السجلات الأخرى ضمن Windows هنا للإيجاز). يلحق الاسم الأساسي باسم القناة لإنشاء اسم السجل الكامل.

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

  1. افتح عارض الأحداث إما عن طريق:

    • Show-EventLog الكتابة في Windows PowerShell
    • تحديد زر البدء، ثم لوحة التحكم، ثم الأدوات الإدارية، ثم عارض الأحداث.
  2. في القائمة عرض في عارض الأحداث، حدد Show Analytic and Debug Logs.

    اسم السجل للقناة التحليلية هو Microsoft-Windows-Dsc/Analytic، وقناة تتبع الأخطاء هي Microsoft-Windows-Dsc/Debug.

يمكنك أيضا استخدام الأداة المساعدة wevtutil لتمكين السجلات، كما هو موضح في المثال التالي.

wevtutil.exe set-log "Microsoft-Windows-Dsc/Analytic" /q:true /e:true

أو استخدم PowerShell و.NET لتمكين السجلات كما هو موضح في المثال التالي:

$logName = 'Microsoft-Windows-Dsc/Analytic'
$log = New-Object System.Diagnostics.Eventing.Reader.EventLogConfiguration $logName
$log.IsEnabled = $true
$log.SaveChanges()

ما الذي تحتوي عليه سجلات DSC؟

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

PS C:\> $AllDscOpEvents = Get-WinEvent -LogName "Microsoft-Windows-Dsc/Operational"
PS C:\> $FirstOperationalEvent = $AllDscOpEvents[0]
PS C:\> $FirstOperationalEvent.Message
Job {02C38626-D95A-47F1-9DA2-C1D44A7128E7} :
Consistency engine was run successfully.

يسجل DSC الأحداث ببنية تمكن المستخدم من جمع الأحداث من مهمة DSC واحدة. البنية كما يلي:

Job ID : <Guid>
<Event Message>

جمع الأحداث من عملية DSC واحدة

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

<##########################################################################
 Step 1 : Enable analytic and debug DSC channels (Operational channel is enabled by default)
###########################################################################>

wevtutil.exe set-log "Microsoft-Windows-Dsc/Analytic" /q:true /e:true
wevtutil.exe set-log "Microsoft-Windows-Dsc/Debug" /q:True /e:true

<##########################################################################
 Step 2 : Perform the required DSC operation (Below is an example, you could run any DSC operation instead)
###########################################################################>

Get-DscLocalConfigurationManager

<##########################################################################
Step 3 : Collect all DSC Logs, from the Analytic, Debug and Operational channels
###########################################################################>

$DscEvents=[System.Array](Get-WinEvent "Microsoft-Windows-Dsc/Operational") `
         + [System.Array](Get-WinEvent "Microsoft-Windows-Dsc/Analytic" -Oldest) `
         + [System.Array](Get-WinEvent "Microsoft-Windows-Dsc/Debug" -Oldest)


<##########################################################################
 Step 4 : Group all logs based on the job ID
###########################################################################>
$SeparateDscOperations = $DscEvents | Group {$_.Properties[0].value}

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

PS C:\> $SeparateDscOperations

Count Name                      Group
----- ----                      -----
   48 {1A776B6A-5BAC-11E3-BF... {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics....
   40 {E557E999-5BA8-11E3-BF... {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics....

PS C:\> $SeparateDscOperations[0].Group

   ProviderName: Microsoft-Windows-DSC

TimeCreated                     Id LevelDisplayName Message
-----------                     -- ---------------- -------
12/2/2013 3:47:29 PM          4115 Information      Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4198 Information      Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4114 Information      Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4102 Information      Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4098 Warning          Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4098 Warning          Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4176 Information      Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4182 Information      Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4182 Information      Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4182 Information      Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4182 Information      Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4182 Information      Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4182 Information      Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4182 Information      Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...
12/2/2013 3:47:29 PM          4182 Information      Job {1A776B6A-5BAC-11E3-BF41-00155D553612} : ...

يمكنك استخراج البيانات في المتغير $SeparateDscOperations باستخدام Where-Object. فيما يلي خمسة سيناريوهات حيث قد تحتاج إلى استخراج البيانات لاستكشاف أخطاء DSC وإصلاحها:

1: فشل العمليات

جميع الأحداث لها مستويات خطورة. هذه المعلومات مفيدة لتحديد أحداث الخطأ:

PS C:\> $SeparateDscOperations | Where-Object {$_.Group.LevelDisplayName -contains "Error"}

Count Name                      Group
----- ----                      -----
   38 {5BCA8BE7-5BB6-11E3-BF... {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics....

2: تفاصيل العمليات التي يتم تشغيلها في النصف ساعة الماضية

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

PS C:\> $DateLatest = (Get-Date).AddMinutes(-30)
PS C:\> $SeparateDscOperations | Where-Object {$_.Group.TimeCreated -gt $DateLatest}

Count Name                      Group
----- ----                      -----
    1 {6CEC5B09-5BB0-11E3-BF... {System.Diagnostics.Eventing.Reader.EventLogRecord}

3: رسائل من أحدث عملية

يتم تخزين أحدث عملية في الفهرس الأول لمجموعة $SeparateDscOperationsالصفيف . يؤدي الاستعلام عن رسائل المجموعة للفهرس 0 إلى إرجاع جميع الرسائل لآخر عملية:

PS C:\> $SeparateDscOperations[0].Group.Message
Job {5BCA8BE7-5BB6-11E3-BF41-00155D553612} :
Running consistency engine.
Job {1A776B6A-5BAC-11E3-BF41-00155D553612} :
Configuration is sent from computer NULL by user sid S-1-5-18.
Job {1A776B6A-5BAC-11E3-BF41-00155D553612} :
Displaying messages from built-in DSC resources:
 WMI channel 1
 ResourceID:
 Message : [INCH-VM]:                            [] Starting consistency engine.
Job {1A776B6A-5BAC-11E3-BF41-00155D553612} :
Displaying messages from built-in DSC resources:
 WMI channel 1
 ResourceID:
 Message : [INCH-VM]:                            [] Consistency check completed.

4: رسائل الخطأ التي تم تسجيلها للعمليات الفاشلة الأخيرة

$SeparateDscOperations[0].Group لديه مجموعة من الأحداث لأحدث عملية. Where-Object قم بتشغيل cmdlet لتصفية الأحداث استنادا إلى اسم عرض المستوى الخاص بها. يتم تخزين النتائج في $myFailedEvent المتغير، والذي يمكن تشريحه بشكل أكبر للحصول على رسالة الحدث:

PS C:\> $myFailedEvent = ($SeparateDscOperations[0].Group |
    Where-Object {$_.LevelDisplayName -eq "Error"})

PS C:\> $myFailedEvent.Message

Job {5BCA8BE7-5BB6-11E3-BF41-00155D553612} :
DSC Engine Error :
 Error Message Current configuration does not exist. Execute Start-DscConfiguration command with
 -Path parameter to specify a configuration file and create a current configuration first.
Error Code : 1

5: جميع الأحداث التي تم إنشاؤها لمعرف وظيفة معين.

$SeparateDscOperations هو صفيف من المجموعات، التي يكون لكل منها الاسم كمعرف وظيفة فريد. من خلال تشغيل Where-Object cmdlet، يمكنك استخراج مجموعات الأحداث التي لها معرف مهمة معين:

PS C:\> ($SeparateDscOperations | Where-Object {$_.Name -eq $jobX} ).Group

   ProviderName: Microsoft-Windows-DSC

TimeCreated                     Id LevelDisplayName Message
-----------                     -- ---------------- -------
12/2/2013 4:33:24 PM          4102 Information      Job {847A5619-5BB2-11E3-BF41-00155D553612} : ...
12/2/2013 4:33:24 PM          4168 Information      Job {847A5619-5BB2-11E3-BF41-00155D553612} : ...
12/2/2013 4:33:24 PM          4146 Information      Job {847A5619-5BB2-11E3-BF41-00155D553612} : ...
12/2/2013 4:33:24 PM          4120 Information      Job {847A5619-5BB2-11E3-BF41-00155D553612} : ...

استخدام xDscDiagnostics لتحليل سجلات DSC

xDscDiagnostics هي وحدة PowerShell تتكون من عدة وظائف يمكن أن تساعد في تحليل حالات فشل DSC على جهازك. يمكن أن تساعدك هذه الدالات في تحديد جميع الأحداث المحلية من عمليات DSC السابقة أو أحداث DSC على أجهزة الكمبيوتر البعيدة. هنا، يحدد مصطلح عملية DSC تنفيذ DSC فريدا واحدا من بدايته حتى نهايته. على سبيل المثال، Test-DscConfiguration ستكون عملية DSC منفصلة. وبالمثل، يمكن تعريف كل cmdlet أخرى في DSC، مثل Get-DscConfiguration و Start-DscConfiguration، ك عمليات DSC منفصلة. لمزيد من المعلومات حول وظائف التشخيص، راجع xDscDiagnostics.

الحصول على تفاصيل عمليات DSC

Get-xDscOperation تتيح لك الدالة العثور على نتائج عمليات DSC التي تعمل على جهاز كمبيوتر واحد أو أكثر. ترجع الدالة كائنا يحتوي على مجموعة الأحداث التي تنتجها كل عملية DSC. على سبيل المثال، في الإخراج التالي، تم تشغيل ثلاثة أوامر. مرت الأولى، وفشل الاثنان الآخران. يلخص إخراج Get-xDscOperation هذه النتائج.

PS C:\DiagnosticsTest> Get-xDscOperation
ComputerName   SequenceId TimeCreated           Result   JobID                                 AllEvents
------------   ---------- -----------           ------   -----                                 ---------
SRV1   1          6/23/2016 9:37:52 AM  Failure  9701aadf-395e-11e6-9165-00155d390509  {@{Message=; TimeC...
SRV1   2          6/23/2016 9:36:54 AM  Failure  7e8e2d6e-395c-11e6-9165-00155d390509  {@{Message=; TimeC...
SRV1   3          6/23/2016 9:36:54 AM  Success  af72c6aa-3960-11e6-9165-00155d390509  {@{Message=Operati...

يمكنك الحصول على نتائج لأحدث العمليات فقط عن طريق تحديد أحدث معلمة:

PS C:\DiagnosticsTest> Get-xDscOperation -Newest 5
ComputerName   SequenceId TimeCreated           Result   JobID                                 AllEvents
------------   ---------- -----------           ------   -----                                 ---------
SRV1   1          6/23/2016 4:36:54 PM  Success                                        {@{Message=; TimeC...
SRV1   2          6/23/2016 4:36:54 PM  Success  5c06402b-399b-11e6-9165-00155d390509  {@{Message=Operati...
SRV1   3          6/23/2016 4:36:54 PM  Success                                        {@{Message=; TimeC...
SRV1   4          6/23/2016 4:36:54 PM  Success  5c06402a-399b-11e6-9165-00155d390509  {@{Message=Operati...
SRV1   5          6/23/2016 4:36:51 PM  Success                                        {@{Message=; TimeC...

الحصول على تفاصيل أحداث DSC

Trace-xDscOperation يقوم cmdlet بإرجاع كائن يحتوي على مجموعة من الأحداث وأنواع الأحداث الخاصة بها وإخراج الرسالة التي تم إنشاؤها من عملية DSC معينة. عادة، عندما تجد فشلا في أي من العمليات باستخدام Get-xDscOperation، يمكنك تتبع هذه العملية للعثور على الأحداث التي تسببت في فشل.

استخدم المعلمة SequenceID للحصول على الأحداث لعملية معينة لجهاز كمبيوتر معين. على سبيل المثال، إذا قمت بتحديد SequenceIDTrace-xDscOperation فاحصل على تتبع عملية DSC التي كانت 9 من العملية الأخيرة:

PS C:\DiagnosticsTest> Trace-xDscOperation -SequenceID 9
ComputerName   EventType    TimeCreated           Message
------------   ---------    -----------           -------
SRV1   OPERATIONAL  6/24/2016 10:51:52 AM Operation Consistency Check or Pull started by user sid S-1-5-20 from computer NULL.
SRV1   OPERATIONAL  6/24/2016 10:51:52 AM Running consistency engine.
SRV1   OPERATIONAL  6/24/2016 10:51:52 AM The local configuration manager is updating the PSModulePath to WindowsPowerShell\Modules;C:\Prog...
SRV1   OPERATIONAL  6/24/2016 10:51:53 AM  Resource execution sequence :: [WindowsFeature]DSCServiceFeature, [xDSCWebService]PSDSCPullServer.
SRV1   OPERATIONAL  6/24/2016 10:51:54 AM Consistency engine was run successfully.
SRV1   OPERATIONAL  6/24/2016 10:51:54 AM Job runs under the following LCM setting. ...
SRV1   OPERATIONAL  6/24/2016 10:51:54 AM Operation Consistency Check or Pull completed successfully.

قم بتمرير GUID المعين لعملية DSC معينة (كما تم إرجاعه بواسطة Get-xDscOperation cmdlet) للحصول على تفاصيل الحدث لعملية DSC هذه:

PS C:\DiagnosticsTest> Trace-xDscOperation -JobID 9e0bfb6b-3a3a-11e6-9165-00155d390509

ComputerName   EventType    TimeCreated           Message
------------   ---------    -----------           -------
SRV1   OPERATIONAL  6/24/2016 11:36:56 AM Operation Consistency Check or Pull started by user sid S-1-5-20 from computer NULL.
SRV1   ANALYTIC     6/24/2016 11:36:56 AM Deleting file from C:\Windows\System32\Configuration\DSCEngineCache.mof
SRV1   OPERATIONAL  6/24/2016 11:36:56 AM Running consistency engine.
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]:                            [] Starting consistency engine.
SRV1   ANALYTIC     6/24/2016 11:36:56 AM Applying configuration from C:\Windows\System32\Configuration\Current.mof.
SRV1   ANALYTIC     6/24/2016 11:36:56 AM Parsing the configuration to apply.
SRV1   OPERATIONAL  6/24/2016 11:36:56 AM  Resource execution sequence :: [WindowsFeature]DSCServiceFeature, [xDSCWebService]PSDSCPullServer.
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]: LCM:  [ Start  Resource ]  [[WindowsFeature]DSCServiceFeature]
SRV1   ANALYTIC     6/24/2016 11:36:56 AM Executing operations for PS DSC resource MSFT_RoleResource with resource name [WindowsFeature]DSC...
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]: LCM:  [ Start  Test     ]  [[WindowsFeature]DSCServiceFeature]
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]:                            [[WindowsFeature]DSCServiceFeature] The operation 'Get...
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]:                            [[WindowsFeature]DSCServiceFeature] The operation 'Get...
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]: LCM:  [ End    Test     ]  [[WindowsFeature]DSCServiceFeature] True in 0.3130 sec...
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]: LCM:  [ End    Resource ]  [[WindowsFeature]DSCServiceFeature]
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]: LCM:  [ Start  Resource ]  [[xDSCWebService]PSDSCPullServer]
SRV1   ANALYTIC     6/24/2016 11:36:56 AM Executing operations for PS DSC resource MSFT_xDSCWebService with resource name [xDSCWebService]P...
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]: LCM:  [ Start  Test     ]  [[xDSCWebService]PSDSCPullServer]
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]:                            [[xDSCWebService]PSDSCPullServer] Check Ensure
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]:                            [[xDSCWebService]PSDSCPullServer] Check Port
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]:                            [[xDSCWebService]PSDSCPullServer] Check Physical Path ...
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]:                            [[xDSCWebService]PSDSCPullServer] Check State
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]:                            [[xDSCWebService]PSDSCPullServer] Get Full Path for We...
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]: LCM:  [ End    Test     ]  [[xDSCWebService]PSDSCPullServer] True in 0.0160 seconds.
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]: LCM:  [ End    Resource ]  [[xDSCWebService]PSDSCPullServer]
SRV1   VERBOSE      6/24/2016 11:36:56 AM [SRV1]:                            [] Consistency check completed.
SRV1   ANALYTIC     6/24/2016 11:36:56 AM Deleting file from C:\Windows\System32\Configuration\DSCEngineCache.mof
SRV1   OPERATIONAL  6/24/2016 11:36:56 AM Consistency engine was run successfully.
SRV1   OPERATIONAL  6/24/2016 11:36:56 AM Job runs under the following LCM setting. ...
SRV1   OPERATIONAL  6/24/2016 11:36:56 AM Operation Consistency Check or Pull completed successfully.
SRV1   ANALYTIC     6/24/2016 11:36:56 AM Deleting file from C:\Windows\System32\Configuration\DSCEngineCache.mof

لاحظ أنه نظرا إلى Trace-xDscOperation أنه يجمع الأحداث من السجلات التحليلية والتصحيح والتشغيلية، فإنه يطالبك بتمكين هذه السجلات.

بدلا من ذلك، يمكنك جمع معلومات حول الأحداث عن طريق حفظ إخراج Trace-xDscOperation في متغير. يمكنك استخدام الأوامر التالية لعرض جميع الأحداث لعملية DSC معينة.

PS C:\DiagnosticsTest> $Trace = Trace-xDscOperation -SequenceID 4

PS C:\DiagnosticsTest> $Trace.Event

يعرض هذا نفس نتائج Get-WinEvent cmdlet، كما هو الحال في الإخراج التالي:

   ProviderName: Microsoft-Windows-DSC

TimeCreated                     Id LevelDisplayName Message
-----------                     -- ---------------- -------
6/23/2016 1:36:53 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.
6/23/2016 1:36:53 AM          4343 Information      The DscTimer has successfully run LCM method PerformRequiredConfigurationChecks with flag 5.
6/23/2016 2:07:00 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.
6/23/2016 2:07:01 AM          4343 Information      The DscTimer has successfully run LCM method PerformRequiredConfigurationChecks with flag 5.
6/23/2016 2:36:55 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.
6/23/2016 2:36:56 AM          4343 Information      The DscTimer has successfully run LCM method PerformRequiredConfigurationChecks with flag 5.
6/23/2016 3:06:55 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.
6/23/2016 3:06:55 AM          4343 Information      The DscTimer has successfully run LCM method PerformRequiredConfigurationChecks with flag 5.
6/23/2016 3:36:55 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.
6/23/2016 3:36:55 AM          4343 Information      The DscTimer has successfully run LCM method PerformRequiredConfigurationChecks with flag 5.
6/23/2016 4:06:53 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.
6/23/2016 4:06:53 AM          4343 Information      The DscTimer has successfully run LCM method PerformRequiredConfigurationChecks with flag 5.
6/23/2016 4:36:52 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.
6/23/2016 4:36:53 AM          4343 Information      The DscTimer has successfully run LCM method PerformRequiredConfigurationChecks with flag 5.
6/23/2016 5:06:52 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.
6/23/2016 5:06:53 AM          4343 Information      The DscTimer has successfully run LCM method PerformRequiredConfigurationChecks with flag 5.
6/23/2016 5:36:54 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.
6/23/2016 5:36:54 AM          4343 Information      The DscTimer has successfully run LCM method PerformRequiredConfigurationChecks with flag 5.
6/23/2016 6:06:52 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.
6/23/2016 6:06:53 AM          4343 Information      The DscTimer has successfully run LCM method PerformRequiredConfigurationChecks with flag 5.
6/23/2016 6:36:56 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.
6/23/2016 6:36:57 AM          4343 Information      The DscTimer has successfully run LCM method PerformRequiredConfigurationChecks with flag 5.
6/23/2016 7:06:52 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.
6/23/2016 7:06:53 AM          4343 Information      The DscTimer has successfully run LCM method PerformRequiredConfigurationChecks with flag 5.
6/23/2016 7:36:53 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.
6/23/2016 7:36:54 AM          4343 Information      The DscTimer has successfully run LCM method PerformRequiredConfigurationChecks with flag 5.
6/23/2016 8:06:54 AM          4312 Information      The DscTimer is running LCM method PerformRequiredConfigurationChecks with the flag set to 5.

من الناحية المثالية، يمكنك أولا استخدام Get-xDscOperation لسرد آخر عدد قليل من تكوين DSC يعمل على أجهزتك. بعد ذلك، يمكنك فحص أي عملية واحدة عن طريق تحديد SequenceID أو JobID الخاص Trace-xDscOperation به لاكتشاف ما فعله خلف الكواليس.

الحصول على أحداث لجهاز كمبيوتر بعيد

ComputerName استخدم معلمة Trace-xDscOperation cmdlet للحصول على تفاصيل الحدث على كمبيوتر بعيد. قبل أن تتمكن من القيام بذلك، يجب عليك إنشاء قاعدة جدار حماية للسماح بالإدارة عن بعد على الكمبيوتر البعيد:

New-NetFirewallRule -Name "Service RemoteAdmin" -DisplayName "Remote" -Action Allow

يمكنك الآن تحديد هذا الكمبيوتر في مكالمتك إلى Trace-xDscOperation:

Trace-xDscOperation -ComputerName SRV2 -Credential Get-Credential -SequenceID 5
ComputerName   EventType    TimeCreated           Message
------------   ---------    -----------           -------
SRV2   OPERATIONAL  6/24/2016 11:36:56 AM Operation Consistency Check or Pull started by user sid S-1-5-20 f...
SRV2   ANALYTIC     6/24/2016 11:36:56 AM Deleting file from C:\Windows\System32\Configuration\DSCEngineCach...
SRV2   OPERATIONAL  6/24/2016 11:36:56 AM Running consistency engine.
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]:                            [] Starting consistency...
SRV2   ANALYTIC     6/24/2016 11:36:56 AM Applying configuration from C:\Windows\System32\Configuration\Curr...
SRV2   ANALYTIC     6/24/2016 11:36:56 AM Parsing the configuration to apply.
SRV2   OPERATIONAL  6/24/2016 11:36:56 AM  Resource execution sequence :: [WindowsFeature]DSCServiceFeature,...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]: LCM:  [ Start  Resource ]  [[WindowsFeature]DSCSer...
SRV2   ANALYTIC     6/24/2016 11:36:56 AM Executing operations for PS DSC resource MSFT_RoleResource with re...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]: LCM:  [ Start  Test     ]  [[WindowsFeature]DSCSer...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]:                            [[WindowsFeature]DSCSer...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]:                            [[WindowsFeature]DSCSer...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]: LCM:  [ End    Test     ]  [[WindowsFeature]DSCSer...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]: LCM:  [ End    Resource ]  [[WindowsFeature]DSCSer...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]: LCM:  [ Start  Resource ]  [[xDSCWebService]PSDSCP...
SRV2   ANALYTIC     6/24/2016 11:36:56 AM Executing operations for PS DSC resource MSFT_xDSCWebService with ...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]: LCM:  [ Start  Test     ]  [[xDSCWebService]PSDSCP...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]:                            [[xDSCWebService]PSDSCP...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]:                            [[xDSCWebService]PSDSCP...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]:                            [[xDSCWebService]PSDSCP...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]:                            [[xDSCWebService]PSDSCP...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]:                            [[xDSCWebService]PSDSCP...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]: LCM:  [ End    Test     ]  [[xDSCWebService]PSDSCP...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]: LCM:  [ End    Resource ]  [[xDSCWebService]PSDSCP...
SRV2   VERBOSE      6/24/2016 11:36:56 AM [SRV2]:                            [] Consistency check co...
SRV2   ANALYTIC     6/24/2016 11:36:56 AM Deleting file from C:\Windows\System32\Configuration\DSCEngineCach...
SRV2   OPERATIONAL  6/24/2016 11:36:56 AM Consistency engine was run successfully.
SRV2   OPERATIONAL  6/24/2016 11:36:56 AM Job runs under the following LCM setting. ...
SRV2   OPERATIONAL  6/24/2016 11:36:56 AM Operation Consistency Check or Pull completed successfully.
SRV2   ANALYTIC     6/24/2016 11:36:56 AM Deleting file from C:\Windows\System32\Configuration\DSCEngineCach...

لن يتم تحديث مواردي: كيفية إعادة تعيين ذاكرة التخزين المؤقت

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

وبالمثل، عند تشغيل Start-DscConfiguration، بعد إضافة مورد مخصص وتعديله، قد لا يتم تنفيذ التعديل ما لم يتم إعادة تشغيل الكمبيوتر أو حتى ذلك. وذلك لأن DSC يعمل في عملية مضيف موفر WMI (WmiPrvSE)، وعادة ما يكون هناك العديد من مثيلات WmiPrvSE قيد التشغيل في وقت واحد. عند إعادة التشغيل، تتم إعادة تشغيل عملية المضيف ومسح ذاكرة التخزين المؤقت.

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

لتحديد العملية التي تستضيف محرك DSC، قم بإدراج معرف العملية ل WmiPrvSE، الذي يستضيف محرك DSC. بعد ذلك، لتحديث الموفر، أوقف WmiPrvSE العملية باستخدام الأوامر أدناه، ثم قم بتشغيل Start-DscConfiguration مرة أخرى.

###
### find the process that is hosting the DSC engine
###
$CimParameters = @{
    ClassName = 'Msft_Providers'
    Filter    = "provider='dsctimer' OR provider='dsccore'"
}
$dscProcessID = Get-CimInstance @CimParameters |
    Select-Object -ExpandProperty HostProcessIdentifier

###
### Stop the process
###
Get-Process -Id $dscProcessID | Stop-Process

استخدام DebugMode

يمكنك تكوين DSC Local Configuration Manager (LCM) لاستخدامه DebugMode لمسح ذاكرة التخزين المؤقت دائما عند إعادة تشغيل عملية المضيف. عند التعيين إلى $true، فإنه يتسبب في إعادة تحميل المحرك دائما لمورد PowerShell DSC. بمجرد الانتهاء من كتابة المورد الخاص بك، يمكنك تعيينه مرة أخرى إلى $false ويعود المحرك إلى سلوكه المتمثل في التخزين المؤقت للوحدات النمطية.

فيما يلي عرض توضيحي لإظهار كيفية DebugMode تحديث ذاكرة التخزين المؤقت تلقائيا. أولا، لنلق نظرة على التكوين الافتراضي:

Get-DscLocalConfigurationManager
AllowModuleOverwrite           : False
CertificateID                  :
ConfigurationID                :
ConfigurationMode              : ApplyAndMonitor
ConfigurationModeFrequencyMins : 30
Credential                     :
DebugMode                      : {None}
DownloadManagerCustomData      :
DownloadManagerName            :
LocalConfigurationManagerState : Ready
RebootNodeIfNeeded             : False
RefreshFrequencyMins           : 15
RefreshMode                    : PUSH
PSComputerName                 :

يمكنك أن ترى أن DebugMode هو None.

لإعداد العرض التوضيحي DebugMode ، استخدم مورد PowerShell التالي:

function Get-TargetResource {
    param (
        [Parameter(Mandatory)] $onlyProperty
    )

    $Path = "$env:SystemDrive\OutputFromTestProviderDebugMode.txt"

    return @{
        onlyProperty = Get-Content -Path $Path
    }
}
function Set-TargetResource {
    param (
        [Parameter(Mandatory)] $onlyProperty
    )

    "1" | Out-File -PSPath "$env:SystemDrive\OutputFromTestProviderDebugMode.txt"
}
function Test-TargetResource {
    param (
        [Parameter(Mandatory)]
        $onlyProperty
    )

    return $false
}

الآن، تأليف تكوين يسمى TestProviderDebugMode:

Configuration ConfigTestDebugMode
{
    Import-DscResource -Name TestProviderDebugMode
    Node localhost
    {
        TestProviderDebugMode test
        {
            onlyProperty = "blah"
        }
    }
}
ConfigTestDebugMode

محتوى الملف $env:SystemDrive\OutputFromTestProviderDebugMode.txt هو 1.

الآن، قم بتحديث التعليمات البرمجية للموفر باستخدام البرنامج النصي التالي:

$newResourceOutput = Get-Random -Minimum 5 -Maximum 30
$OutputPath = "C:\Program Files\WindowsPowerShell\Modules\MyPowerShellModules\DSCResources\TestProviderDebugMode\TestProviderDebugMode.psm1"
$content = @"
function Get-TargetResource {
    param (
        [Parameter(Mandatory)] `$onlyProperty
    )

    `$Path = "$env:SystemDrive\OutputFromTestProviderDebugMode.txt"
    return @{
        onlyProperty = Get-Content -Path $Path
    }
}
function Set-TargetResource {
    param (
        [Parameter(Mandatory)] `$onlyProperty
    )

    "$newResourceOutput" | Out-File -PSPath C:\OutputFromTestProviderDebugMode.txt
}
function Test-TargetResource {
    param (
        [Parameter(Mandatory)] `$onlyProperty
    )

    return `$false
}
"@ | Out-File -FilePath $OutputPath

ينشئ هذا البرنامج النصي رقما عشوائيا ويحدث التعليمات البرمجية للموفر. مع DebugMode تعيين إلى خطأ، لا يتم تغيير محتويات الملف $env:SystemDrive\OutputFromTestProviderDebugMode.txt أبدا.

الآن، قم بتعيين DebugMode إلى ForceModuleImport في البرنامج النصي للتكوين الخاص بك:

LocalConfigurationManager
{
    DebugMode = "ForceModuleImport"
}

عند تشغيل البرنامج النصي مرة أخرى، لاحظ أن محتوى الملف مختلف في كل مرة. يمكنك تشغيل Get-DscConfiguration للتحقق منه. تظهر القصاصة البرمجية أدناه نتيجة تشغيلين إضافيين. قد تختلف نتائجك عند تشغيل البرنامج النصي.

PS C:\> Get-DscConfiguration -CimSession (New-CimSession localhost)

onlyProperty                            PSComputerName
------------                            --------------
20                                      localhost

PS C:\> Get-DscConfiguration -CimSession (New-CimSession localhost)

onlyProperty                            PSComputerName
------------                            --------------
14                                      localhost

ترجع DSC "رمز الاستجابة غير المتوقع InternalServerError" عند التسجيل مع Windows Pull Server

عند تطبيق تكوين تعريف على خادم لتسجيله مع مثيل Windows Pull Server، قد تحصل على الخطأ التالي.

Registration of the Dsc Agent with the server https://<serverfqdn>:8080/PSDSCPullServer.svc failed. The underlying error is: The attempt to register Dsc Agent with AgentId <ID> with the server
https://<serverfqdn>:8080/PSDSCPullServer.svc/Nodes(AgentId='<ID>') returned unexpected response code InternalServerError. .
    + CategoryInfo          : InvalidResult: (root/Microsoft/...gurationManager:String) [], CimException
    + FullyQualifiedErrorId : RegisterDscAgentUnsuccessful,Microsoft.PowerShell.DesiredStateConfiguration.Commands.RegisterDscAgentCommand
    + PSComputerName        : <computername>

يمكن أن يحدث هذا عندما تحتوي الشهادة المستخدمة على الخادم لتشفير نسبة استخدام الشبكة على اسم شائع (CN) يختلف عن اسم DNS الذي تستخدمه العقدة لحل عنوان URL. قم بتحديث مثيل Windows Pull Server لاستخدام شهادة باسم مصحح.

خطأ عند تشغيل Sysprep بعد تطبيق تكوين DSC

عند محاولة تشغيل Sysprep لتعميم خادم Windows بعد تطبيق تكوين DSC، قد تحصل على الخطأ التالي.

SYSPRP LaunchDll:Failure occurred while executing 'DscCore.dll,SysPrep_Cleanup', returned error code 0x2

تعميم خادم بعد تكوينه باستخدام Windows PowerShell تكوين الحالة المطلوبة ليس سيناريو مدعوما. بدلا من ذلك، قم بتطبيق التكوينات على Windows بعد اكتمال مرحلة التخصص في إعداد Windows.

راجع أيضاً

المفاهيم

موارد أخرى