Problemen met DSC oplossen

Van toepassing op: Windows PowerShell 4.0, Windows PowerShell 5.1

Dit artikel bevat instructies voor probleemoplossing voor veelvoorkomende fouten.

WinRM-afhankelijkheid

Windows PowerShell Desired State Configuration (DSC) is afhankelijk van WinRM. WinRM is niet standaard ingeschakeld op Windows Server 2008 R2 en Windows 7. Voer Set-WSManQuickConfiguit in een Windows PowerShell sessie met verhoogde bevoegdheid om WinRM in te schakelen.

Get-DscConfigurationStatus gebruiken

De cmdlet Get-DscConfigurationStatus haalt informatie over de configuratiestatus op van een doelknooppunt. De opdracht retourneert een uitgebreid object met informatie op hoog niveau over of de configuratie-uitvoering is geslaagd of niet. U kunt het object bekijken om details over de configuratieuitvoering te ontdekken, zoals:

  • Elke resource die is mislukt.
  • Elke resource waarvoor opnieuw opstarten is aangevraagd.
  • Meta-Configuration instellingen op het moment dat de configuratie wordt uitgevoerd.

De volgende parameterset retourneert de statusinformatie voor de laatste configuratie-uitvoering:

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

De volgende parameterset retourneert de statusinformatie voor elke configuratie-uitvoering:

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

Voorbeeld

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        :

Mijn script wordt niet uitgevoerd: DSC-logboeken gebruiken om scriptfouten te diagnosticeren

Net als alle Windows-software registreert DSC fouten en gebeurtenissen in logboeken die beschikbaar zijn voor controle in Logboeken. Als u deze logboeken bekijkt, kunt u begrijpen waarom een bepaalde bewerking is mislukt en hoe u fouten in de toekomst kunt voorkomen. Gebruik de DSC-logboekresource om de voortgang van uw configuratie bij te houden in het gebeurtenislogboek van DSC Analytic om fouten bij te houden tijdens het maken van fouten.

Waar zijn DSC-gebeurtenislogboeken?

In Logboeken bevinden DSC-gebeurtenissen zich in: Logboeken voor toepassingen en services/Microsoft/Windows/Desired State Configuration

U kunt de bijbehorende PowerShell-cmdlet, Get-WinEvent, uitvoeren om de gebeurtenislogboeken weer te geven:

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} :

De primaire logboeknaam van DSC is Microsoft-Windows-DSC>> (andere logboeknamen onder Windows worden hier niet kort weergegeven). De primaire naam wordt toegevoegd aan de kanaalnaam om de volledige logboeknaam te maken.

De DSC-engine schrijft voornamelijk in drie typen logboeken: operationele, analytische en foutopsporingslogboeken. Omdat de analyse- en foutopsporingslogboeken niet standaard zijn ingeschakeld, moet u deze inschakelen in Logboeken. Om dit te doen:

  1. Open Logboeken op een van de volgende opties:

    • Typen Show-EventLog in Windows PowerShell
    • Selecteer de Startknop, vervolgens Configuratiescherm, vervolgens Systeembeheer en Logboeken.
  2. Selecteer in het menu Weergave in Logboeken de optie Logboeken voor analyse en foutopsporing weergeven.

    De logboeknaam voor het analytische kanaal is Microsoft-Windows-Dsc/Analyticen het foutopsporingskanaal is Microsoft-Windows-Dsc/Debug.

U kunt ook het hulpprogramma wevtutil gebruiken om de logboeken in te schakelen, zoals wordt weergegeven in het volgende voorbeeld.

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

Of gebruik PowerShell en .NET om de logboeken in te schakelen, zoals wordt weergegeven in het volgende voorbeeld:

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

Wat bevatten DSC-logboeken?

DSC registreert drie verschillende logboekkanalen op basis van het belang van het bericht. Het operationele logboek in DSC bevat alle foutberichten en is handig voor het identificeren van een probleem. Het analytische logboek bevat een groter aantal gebeurtenissen en kan bepalen waar fouten zijn opgetreden. Dit kanaal bevat ook alle verzonden uitgebreide berichten. Het foutopsporingslogboek bevat logboeken die u kunnen helpen begrijpen hoe de fouten zijn opgetreden. DSC-gebeurtenisberichten beginnen met een taak-id die uniek een DSC-bewerking vertegenwoordigt. In het volgende voorbeeld wordt geprobeerd het bericht op te halen van de eerste gebeurtenis die is aangemeld in het operationele DSC-logboek.

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 registreert gebeurtenissen met een structuur waarmee de gebruiker gebeurtenissen van één DSC-taak kan verzamelen. De structuur is als volgt:

Job ID : <Guid>
<Event Message>

Gebeurtenissen verzamelen van één DSC-bewerking

DSC-gebeurtenislogboeken bevatten gebeurtenissen die zijn gegenereerd door verschillende DSC-bewerkingen. Meestal houdt u zich echter bezig met de details voor een specifieke bewerking. Alle DSC-logboeken kunnen worden gegroepeerd op de eigenschap taak-id die uniek is voor elke DSC-bewerking. De taak-id wordt weergegeven als de eerste eigenschapswaarde in alle DSC-gebeurtenissen. In de volgende stappen wordt uitgelegd hoe u alle gebeurtenissen in een gegroepeerde matrixstructuur kunt verzamelen.

<##########################################################################
 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}

Hier bevat de variabele $SeparateDscOperations logboeken die zijn gegroepeerd op de taak-id's. Elk matrixelement van deze variabele vertegenwoordigt een groep gebeurtenissen die worden geregistreerd door een andere DSC-bewerking, zodat u toegang hebt tot meer informatie over de logboeken.

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} : ...

U kunt de gegevens in de variabele $SeparateDscOperations extraheren met behulp van Where-Object. Hier volgen vijf scenario's waarin u mogelijk gegevens wilt extraheren voor het oplossen van problemen met DSC:

1: Bewerkingsfouten

Alle gebeurtenissen hebben ernstniveaus. Deze informatie is nuttig voor het identificeren van de fout gebeurtenissen:

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: Details van bewerkingen die in het afgelopen half uur zijn uitgevoerd

TimeCreated, een eigenschap van elke Windows-gebeurtenis, geeft aan wanneer de gebeurtenis is gemaakt. Het vergelijken van deze eigenschap met een bepaald datum/tijd-object is handig voor het filteren van alle gebeurtenissen:

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: Berichten van de meest recente bewerking

De meest recente bewerking wordt opgeslagen in de eerste index van de matrixgroep $SeparateDscOperations. Als u een query uitvoert op de berichten van de groep voor index 0, worden alle berichten voor de meest recente bewerking geretourneerd:

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: Foutberichten geregistreerd voor recente mislukte bewerkingen

$SeparateDscOperations[0].Group bevat de set gebeurtenissen voor de meest recente bewerking. Voer de Where-Object cmdlet uit om de gebeurtenissen te filteren op basis van hun weergavenaam op niveau. Resultaten worden opgeslagen in de $myFailedEvent variabele, die verder kan worden ontleed om het gebeurtenisbericht op te halen:

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: Alle gebeurtenissen die zijn gegenereerd voor een bepaalde taak-id.

$SeparateDscOperations is een matrix met groepen die elk de naam als de unieke taak-id hebben. Door de Where-Object cmdlet uit te voeren, kunt u de groepen gebeurtenissen extraheren die een bepaalde taak-id hebben:

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 gebruiken om DSC-logboeken te analyseren

xDscDiagnostics is een PowerShell-module die bestaat uit verschillende functies die u kunnen helpen bij het analyseren van DSC-fouten op uw computer. Deze functies kunnen u helpen bij het identificeren van alle lokale gebeurtenissen van eerdere DSC-bewerkingen of DSC-gebeurtenissen op externe computers. Hier definieert de term DSC-bewerking één unieke DSC-uitvoering van het begin tot het einde. Zou bijvoorbeeld Test-DscConfiguration een afzonderlijke DSC-bewerking zijn. Op dezelfde manier kunnen alle andere cmdlets in DSC, zoals Get-DscConfiguration en Start-DscConfiguration, worden geïdentificeerd als afzonderlijke DSC-bewerkingen. Zie xDscDiagnostics voor meer informatie over de diagnostische functies.

Details van DSC-bewerkingen ophalen

Met Get-xDscOperation de functie kunt u de resultaten vinden van de DSC-bewerkingen die worden uitgevoerd op een of meer computers. De functie retourneert een -object met de verzameling gebeurtenissen die door elke DSC-bewerking worden geproduceerd. In de volgende uitvoer zijn bijvoorbeeld drie opdrachten uitgevoerd. De eerste is geslaagd en de andere twee zijn mislukt. De uitvoer van geeft een overzicht van Get-xDscOperation deze resultaten.

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...

U kunt alleen resultaten voor de meest recente bewerkingen krijgen door de parameter Nieuwste op te geven:

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...

Details van DSC-gebeurtenissen ophalen

De Trace-xDscOperation cmdlet retourneert een object met een verzameling gebeurtenissen, hun gebeurtenistypen en de berichtuitvoer die is gegenereerd op basis van een bepaalde DSC-bewerking. Wanneer u een fout vindt in een van de bewerkingen met behulp Get-xDscOperationvan , traceert u die bewerking meestal om de gebeurtenissen te vinden die een fout hebben veroorzaakt.

Gebruik de SequenceID parameter om de gebeurtenissen voor een specifieke bewerking voor een specifieke computer op te halen. Als u bijvoorbeeld een SequenceID van 9 opgeeft, Trace-xDscOperation haalt u de tracering op voor de DSC-bewerking die de 9e was van de laatste bewerking:

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.

Geef de GUID door die is toegewezen aan een specifieke DSC-bewerking (zoals geretourneerd door de Get-xDscOperation cmdlet) om de gebeurtenisdetails voor die DSC-bewerking op te halen:

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 Aangezien gebeurtenissen uit de logboeken analyse, foutopsporing en operationele logboeken worden samengevoegd, wordt u gevraagd deze logboeken in te schakelen.

U kunt ook informatie over de gebeurtenissen verzamelen door de uitvoer van Trace-xDscOperation op te slaan in een variabele. U kunt de volgende opdrachten gebruiken om alle gebeurtenissen voor een bepaalde DSC-bewerking weer te geven.

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

PS C:\DiagnosticsTest> $Trace.Event

Hiermee worden dezelfde resultaten weergegeven als de Get-WinEvent cmdlet, zoals in de volgende uitvoer:

   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.

In het ideale voorbeeld gebruikt u eerst Get-xDscOperation om de laatste paar DSC-configuratie-uitvoeringen op uw machines weer te geven. Hierna kunt u elke bewerking onderzoeken door de SequenceID of JobID met Trace-xDscOperation op te geven om te ontdekken wat deze achter de schermen heeft gedaan.

Gebeurtenissen ophalen voor een externe computer

Gebruik de ComputerName parameter van de Trace-xDscOperation cmdlet om de gebeurtenisdetails op een externe computer op te halen. Voordat u dit kunt doen, moet u een firewallregel maken om extern beheer op de externe computer toe te staan:

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

Nu kunt u die computer opgeven in uw aanroep naar 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...

Mijn resources worden niet bijgewerkt: De cache opnieuw instellen

De DSC-engine slaat resources in de cache op die zijn geïmplementeerd als een PowerShell-module voor efficiëntiedoeleinden. Dit kan echter problemen veroorzaken wanneer u een resource maakt en deze tegelijkertijd test, omdat DSC de versie in de cache laadt totdat het proces opnieuw wordt gestart. De enige manier om DSC de nieuwere versie te laten laden, is door het proces dat als host fungeert voor de DSC-engine expliciet te beëindigen.

En wanneer u uitvoert Start-DscConfiguration, na het toevoegen en wijzigen van een aangepaste resource, kan de wijziging niet worden uitgevoerd, tenzij of totdat de computer opnieuw wordt opgestart. Dit komt doordat DSC wordt uitgevoerd in het WMI-providerhostproces (WmiPrvSE) en meestal zijn er veel exemplaren van WmiPrvSE die tegelijk worden uitgevoerd. Wanneer u opnieuw opstart, wordt het hostproces opnieuw gestart en wordt de cache gewist.

Als u de configuratie wilt recyclen en de cache wilt wissen zonder opnieuw op te starten, moet u het hostproces stoppen en vervolgens opnieuw starten. Dit kan per instantie zijn, waarbij u het proces identificeert, stopt en opnieuw start. U kunt ook , zoals hieronder wordt weergegeven, gebruiken DebugModeom de PowerShell DSC-resource opnieuw te laden.

Als u het proces wilt identificeren dat als host fungeert voor de DSC-engine, vermeldt u de proces-id van de WmiPrvSE, die als host fungeert voor de DSC-engine. Als u de provider wilt bijwerken, stopt u het WmiPrvSE proces met behulp van de onderstaande opdrachten en voert u vervolgens opnieuw uit 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 gebruiken

U kunt de DSC Local Configuration Manager (LCM) configureren om de cache altijd te DebugMode wissen wanneer het hostproces opnieuw wordt gestart. Als dit is ingesteld op $true, zorgt dit ervoor dat de engine de PowerShell DSC-resource altijd opnieuw laadt. Zodra u klaar bent met het schrijven van uw resource, kunt u deze weer instellen op $false en keert de engine terug naar het gedrag van het opslaan in de cache van de modules.

Hier volgt een demonstratie om te laten zien hoe DebugMode de cache automatisch kan worden vernieuwd. Laten we eerst de standaardconfiguratie bekijken:

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

U kunt zien dat DebugMode is None.

Gebruik de volgende PowerShell-resource om de DebugMode demonstratie in te stellen:

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
}

Ontwerp nu een configuratie met de naam TestProviderDebugMode:

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

De inhoud van het bestand $env:SystemDrive\OutputFromTestProviderDebugMode.txt is 1.

Werk nu de providercode bij met behulp van het volgende script:

$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

Met dit script wordt een willekeurig getal gegenereerd en wordt de providercode bijgewerkt. Als DebugMode deze optie is ingesteld op false, wordt de inhoud van het bestand $env:SystemDrive\OutputFromTestProviderDebugMode.txt nooit gewijzigd.

Stel nu in DebugMode op ForceModuleImport in uw configuratiescript:

LocalConfigurationManager
{
    DebugMode = "ForceModuleImport"
}

Wanneer u het script opnieuw uitvoert, moet u er rekening mee houden dat de inhoud van het bestand elke keer anders is. U kunt uitvoeren Get-DscConfiguration om het te controleren. In het onderstaande fragment ziet u het resultaat van nog twee uitvoeringen. Uw resultaten kunnen afwijken wanneer u het script uitvoert.

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 retourneert 'onverwachte antwoordcode InternalServerError' bij het registreren bij Windows Pull Server

Wanneer u een metaconfiguratie toepast op een server om deze te registreren bij een exemplaar van Windows Pull Server, krijgt u mogelijk de volgende fout.

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>

Dit kan gebeuren wanneer het certificaat dat op de server wordt gebruikt om verkeer te versleutelen, een andere algemene naam (CN) heeft dan de DNS-naam die door het knooppunt wordt gebruikt om de URL om te lossen. Werk het Windows Pull Server-exemplaar bij om een certificaat met een gecorrigeerde naam te gebruiken.

Fout bij het uitvoeren van Sysprep na het toepassen van een DSC-configuratie

Wanneer u Probeert Sysprep uit te voeren om een Windows Server te generaliseren na het toepassen van een DSC-configuratie, kan de volgende fout optreden.

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

Het generaliseren van een server nadat deze is geconfigureerd met behulp van Windows PowerShell Desired State Configuration is geen ondersteund scenario. Pas in plaats daarvan configuraties toe op Windows nadat de fase Special van Windows Setup is voltooid.

Zie ook

Concepten

Meer informatie