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-WSManQuickConfig
uit 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:
Open Logboeken op een van de volgende opties:
- Typen
Show-EventLog
in Windows PowerShell - Selecteer de Startknop, vervolgens Configuratiescherm, vervolgens Systeembeheer en Logboeken.
- Typen
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/Analytic
en het foutopsporingskanaal isMicrosoft-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-xDscOperation
van , 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 DebugMode
om 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
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub Issues geleidelijk uitfaseren als het feedbackmechanisme voor inhoud. Het wordt vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor