Problembehandlung bei DSC
Gilt für: Windows PowerShell 4.0, Windows PowerShell 5.1
Dieser Artikel enthält Anleitungen zur Behandlung häufiger Fehler.
WinRM-Abhängigkeit
Windows PowerShell DSC (Desired State Configuration) hängt von WinRM ab. WinRM ist unter Windows Server 2008 R2 und Windows 7 nicht standardmäßig aktiviert. Führen Sie zum Aktivieren von WinRM in einer Windows PowerShell-Sitzung mit erhöhten Benutzerrechten Set-WSManQuickConfig
aus.
Verwenden von „Get-DscConfigurationStatus“
Das Cmdlet Get-DscConfigurationStatus ruft Informationen zum Konfigurationsstatus von einem Zielknoten ab. Der Befehl gibt ein umfangreiches Objekt zurück, das allgemeine Informationen darüber enthält, ob die Konfigurationsausführung erfolgreich war oder nicht. Sie können das Objekt eingehender untersuchen, um Details zur Ausführung der Konfiguration zu ermitteln, wie z. B.:
- Jede Ressource, bei der ein Fehler aufgetreten ist.
- Jede Ressource, die einen Neustart angefordert hat.
- Meta-Configuration Einstellungen zum Zeitpunkt der Konfigurationsausführung.
Die folgende Parametergruppe gibt die Statusinformationen zur letzten Konfigurationsausführung zurück:
Get-DscConfigurationStatus [-CimSession <CimSession[]>]
[-ThrottleLimit <int>]
[-AsJob]
[<CommonParameters>]
Der folgende Parametersatz gibt die status Informationen für jede Konfigurationsausführung zurück:
Get-DscConfigurationStatus -All
[-CimSession <CimSession[]>]
[-ThrottleLimit <int>]
[-AsJob]
[<CommonParameters>]
Beispiel
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 :
Mein Skript wird nicht ausgeführt: Verwenden von DSC-Protokollen für die Diagnose von Skriptfehlern
Wie alle Windows-Software zeichnet DSC Fehler und Ereignisse in Protokollen auf, die in Ereignisanzeige zur Überprüfung zur Verfügung stehen. Die Durchsicht dieser Protokolle kann Ihnen dabei helfen herauszufinden, warum ein bestimmter Vorgang fehlgeschlagen ist und wie Sie Fehler in Zukunft vermeiden. Verwenden Sie die DSC-Protokollressource, um den Fortschritt Ihrer Konfiguration im DSC Analytic-Ereignisprotokoll nachzuverfolgen, um die Nachverfolgung von Fehlern beim Erstellen zu vereinfachen.
Wo befinden sich die DSC-Ereignisprotokolle?
In der Ereignisanzeige befinden sich DSC-Ereignisse unter: Applications and Services Logs/Microsoft/Windows/Desired State Configuration
Sie können das entsprechende PowerShell-Cmdlet Get-WinEvent ausführen, um die Ereignisprotokolle anzuzeigen:
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} :
Der primäre Protokollname von DSC ist Microsoft-Windows-DSC>> (andere Protokollnamen unter Windows werden hier aus Gründen der Kürze nicht angezeigt). Der primäre Name wird an den Kanalnamen angefügt, um den vollständigen Protokollnamen zu erstellen.
Die DSC-Engine schreibt hauptsächlich in drei Arten von Protokollen: Betriebs-, Analyse- und Debugprotokolle. Da die Analyse- und Debugprotokolle standardmäßig nicht aktiviert sind, sollten Sie sie in Ereignisanzeige aktivieren. Gehen Sie dazu folgendermaßen vor:
Öffnen Sie Ereignisanzeige mit einem der folgenden Optionen:
Show-EventLog
Eingabe in Windows PowerShell- Klicken Sie auf die Schaltfläche Start, dann Systemsteuerung, dann Verwaltung und dann Ereignisanzeige.
Wählen Sie im Menü Ansicht in der Ereignisanzeige die Option Analyse- und Debugprotokolle anzeigen aus.
Der Protokollname für den Analysekanal ist
Microsoft-Windows-Dsc/Analytic
, und der Debugkanal istMicrosoft-Windows-Dsc/Debug
.
Außerdem können Sie zum Aktivieren der Protokolle das Hilfsprogramm wevtutil verwenden, wie im folgenden Beispiel gezeigt.
wevtutil.exe set-log "Microsoft-Windows-Dsc/Analytic" /q:true /e:true
Oder verwenden Sie PowerShell und .NET, um die Protokolle wie im folgenden Beispiel gezeigt zu aktivieren:
$logName = 'Microsoft-Windows-Dsc/Analytic'
$log = New-Object System.Diagnostics.Eventing.Reader.EventLogConfiguration $logName
$log.IsEnabled = $true
$log.SaveChanges()
Was ist in den DSC-Protokollen enthalten?
DSC protokolliert basierend auf der Bedeutung der Nachricht drei verschiedene Protokollkanäle. Das Betriebsprotokoll in DSC enthält alle Fehlermeldungen und ist nützlich, um ein Problem zu identifizieren. Das Analyseprotokoll weist eine höhere Ereignismenge auf und kann identifizieren, wo Fehler aufgetreten sind. Dieser Kanal enthält auch alle ausgegebenen ausführlichen Nachrichten. Das Debugprotokoll enthält Protokolle, die Ihnen helfen können, zu verstehen, wie die Fehler aufgetreten sind. DSC-Ereignismeldungen beginnen mit einer Auftrags-ID, die einen DSC-Vorgang eindeutig darstellt. Im folgenden Beispiel wird versucht, die Nachricht vom ersten Ereignis abzurufen, das im operativen DSC-Protokoll angemeldet ist.
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 protokolliert Ereignisse mit einer Struktur, die es dem Benutzer ermöglicht, Ereignisse von einem DSC-Auftrag zu erfassen. Die Struktur sieht wie folgt aus:
Job ID : <Guid>
<Event Message>
Sammeln von Ereignissen zu einem einzelnen DSC-Vorgang
DSC-Ereignisprotokolle enthalten Ereignisse, die mithilfe verschiedener DSC-Vorgänge generiert wurden. In der Regel kümmern Sie sich jedoch um die Details für einen bestimmten Vorgang. Alle DSC-Protokolle können nach der Auftrags-ID-Eigenschaft gruppiert werden, die für jeden DSC-Vorgang eindeutig ist. Die Auftrags-ID wird als erster Eigenschaftswert in allen DSC-Ereignissen angezeigt. Die folgenden Schritte erläutern, wie Sie alle Ereignisse in einer gruppierten Arraystruktur sammeln.
<##########################################################################
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 enthält die Variable $SeparateDscOperations
Protokolle, die nach den Auftrags-IDs gruppiert sind. Jedes Arrayelement dieser Variablen stellt eine Gruppe von Ereignissen dar, die von einem anderen DSC-Vorgang protokolliert wurden, und ermöglicht den Zugriff auf weitere Informationen zu den Protokollen .
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} : ...
Sie können die Daten in der Variablen $SeparateDscOperations
mit Where-Object extrahieren.
Im Folgenden finden Sie fünf Szenarien, in denen Sie Möglicherweise Daten für die Problembehandlung bei DSC extrahieren möchten:
1: Fehler bei Vorgängen
Alle Ereignisse verfügen über Schweregrade. Diese Informationen sind nützlich, um die Fehlerereignisse zu identifizieren:
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 zu Vorgängen, die in der letzten halben Stunde ausgeführt wurden
TimeCreated
, eine Eigenschaft jedes Windows-Ereignisses, gibt den Zeitpunkt an, zu dem das Ereignis erstellt wurde. Der Vergleich dieser Eigenschaft mit einem bestimmten Datums-/Uhrzeitobjekt ist nützlich, um alle Ereignisse zu filtern:
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: Meldungen zum aktuellen Vorgang
Der aktuelle Vorgang wird im ersten Index der Arraygruppe $SeparateDscOperations
gespeichert.
Durch Abfragen der Meldungen der Gruppe für den Index 0 werden alle Meldungen für den aktuellen Vorgang zurückgegeben:
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: Fehlermeldungen, die für die letzten fehlgeschlagenen Vorgänge protokolliert wurden
$SeparateDscOperations[0].Group
verfügt über den Ereignissatz für den neuesten Vorgang. Führen Sie das Cmdlet Where-Object
aus, um die Ereignisse basierend auf dem Schweregrad/Anzeigenamen zu filtern. Die Ergebnisse werden in der Variablen $myFailedEvent
gespeichert. Diese kann weiter zerlegt werden, um die Ereignismeldung zu erhalten:
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 Ereignisse, die für eine bestimmte Auftrags-ID generiert wurden.
$SeparateDscOperations
ist ein Array von Gruppen, die jeweils den Namen als eindeutige Auftrags-ID haben. Durch Ausführen des Cmdlets Where-Object
können Sie die Gruppen von Ereignissen mit einer bestimmten Auftrags-ID extrahieren:
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} : ...
Verwenden von „xDscDiagnostics“ zum Analysieren von DSC-Protokollen
xDscDiagnostics ist ein PowerShell-Modul, das aus mehreren Funktionen besteht, die bei der Analyse von DSC-Fehlern auf dem Computer helfen können. Diese Funktionen können Ihnen helfen, alle lokalen Ereignisse aus früheren DSC-Vorgängen oder DSC-Ereignissen auf Remotecomputern zu identifizieren. Hier definiert der Begriff DSC-Vorgang eine einzelne eindeutige DSC-Ausführung vom Anfang bis zum Ende. Test-DscConfiguration
wäre z. B. ein separater DSC-Vorgang. Ebenso sind alle anderen Cmdlets in DSC, z Get-DscConfiguration
. B. und Start-DscConfiguration
, als separate DSC-Vorgänge identifizierbar. Weitere Informationen zu den Diagnose-Funktionen finden Sie unter xDscDiagnostics.
Abrufen von Details der DSC-Vorgänge
Mit Get-xDscOperation
der Funktion können Sie die Ergebnisse der DSC-Vorgänge finden, die auf einem oder mehreren Computern ausgeführt werden. Die Funktion gibt ein -Objekt zurück, das über die Auflistung von Ereignissen verfügt, die von jedem DSC-Vorgang erzeugt werden. In der folgenden Ausgabe wurden beispielsweise drei Befehle ausgeführt. Der erste wurde erfolgreich ausgeführt, bei den beiden anderen sind Fehler aufgetreten. Die Ausgabe von Get-xDscOperation
fasst diese Ergebnisse zusammen.
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...
Sie können ergebnisse nur für die neuesten Vorgänge abrufen, indem Sie den neuesten Parameter angeben:
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...
Abrufen von Details der DSC-Ereignisse
Das Cmdlet Trace-xDscOperation
gibt ein Objekt zurück, das eine Sammlung von Ereignissen, deren Ereignistypen und die von einem bestimmten DSC-Vorgang generierte Meldungsausgabe enthält. Wenn Sie einen Fehler in einem der Vorgänge mit Get-xDscOperation
finden, werden Sie diesen Vorgang in der Regel nachverfolgen, um die Ereignisse zu finden, die einen Fehler verursacht haben.
Verwenden Sie den Parameter SequenceID
, um die Ereignisse eines bestimmten Vorgangs auf einem bestimmten Computer abzurufen.
Wenn Sie beispielsweise für SequenceID
„9“ angeben, ruft Trace-xDscOperation
die Verfolgung des neuntletzten DSC-Vorgangs ab:
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.
Übergeben Sie die einem bestimmten DSC-Vorgang zugeordnete GUID (wie vom Cmdlet Get-xDscOperation
zurückgegeben), um die Ereignisdetails für diesen DSC-Vorgang abzurufen:
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
Beachten Sie, dass Sie aufgefordert werden, diese Protokolle zu aktivieren, da Trace-xDscOperation
Ereignisse aus den Protokollen Analyse, Debuggen und Betriebsprotokollen aggregiert werden.
Informationen zu den Ereignissen können Sie alternativ auch sammeln, indem Sie die Ausgabe von Trace-xDscOperation
in einer Variablen speichern. Verwenden Sie die folgenden Befehle, um alle Ereignisse für einen bestimmten DSC-Vorgang anzuzeigen.
PS C:\DiagnosticsTest> $Trace = Trace-xDscOperation -SequenceID 4
PS C:\DiagnosticsTest> $Trace.Event
Dadurch werden die gleichen Ergebnisse wie das Get-WinEvent
Cmdlet angezeigt, z. B. in der folgenden Ausgabe:
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.
Im Idealfall würden Sie zuerst Get-xDscOperation
verwenden, um die letzten DSC-Konfigurationsausführungen auf Ihren Computern aufzulisten. Anschließend können Sie jeden einzelnen Vorgang untersuchen, indem Sie seine SequenceID oder JobID mit Trace-xDscOperation
angeben, um zu ermitteln, was er im Hintergrund getan hat.
Abrufen von Ereignissen für einen Remotecomputer
Verwenden Sie den Parameter ComputerName
des Cmdlets Trace-xDscOperation
, um Details von Ereignissen abzurufen, die auf einem Remotecomputer auftreten. Zuvor müssen Sie eine Firewallregel erstellen, um die Remoteverwaltung auf dem Remotecomputer zu erlauben:
New-NetFirewallRule -Name "Service RemoteAdmin" -DisplayName "Remote" -Action Allow
Nun können Sie diesen Computer angeben, wenn Sie Trace-xDscOperation
aufrufen:
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...
Meine Ressourcen werden nicht aktualisiert: Zurücksetzen des Caches
Die DSC-Engine speichert Ressourcen zwischen, die aus Effizienzgründen als PowerShell-Engine implementiert wurden. Dies kann jedoch zu Problemen führen, wenn Sie eine Ressource erstellen und gleichzeitig testen, da DSC die zwischengespeicherte Version lädt, bis der Prozess neu gestartet wird. Die einzige Möglichkeit, DSC zu veranlassen, die neuere Version zu laden, besteht darin, den Prozess, der die DSC-Engine hostet, explizit zu beenden.
Ebenso kann die Änderung beim Ausführen Start-DscConfiguration
von nach dem Hinzufügen und Ändern einer benutzerdefinierten Ressource nur ausgeführt werden, wenn oder bis der Computer neu gestartet wird. Dies liegt daran, dass DSC im WMI-Anbieterhostprozess (WmiPrvSE
) ausgeführt wird und in der Regel viele Instanzen von WmiPrvSE gleichzeitig ausgeführt werden. Beim Neustart wird der Hostprozess neu gestartet und der Cache gelöscht.
Um die Konfiguration erfolgreich zu recyceln und den Cache zu löschen, ohne einen Neustart auszuführen, müssen Sie den Hostprozess beenden und neu starten. Dies kann auf instance Basis erfolgen, wobei Sie den Prozess identifizieren, beenden und neu starten. Sie können auch DebugMode
verwenden, wie nachfolgend gezeigt, um die PowerShell DSC-Ressource erneut zu laden.
Um den Prozess zu identifizieren, der die DSC-Engine hosten soll, listen Sie die Prozess-ID der WmiPrvSE
auf, die die DSC-Engine hosten. Um den Anbieter zu aktualisieren, beenden Sie den WmiPrvSE
Prozess mithilfe der folgenden Befehle, und führen Sie dann erneut aus 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
Verwenden von DebugMode
Sie können den lokalen Konfigurations-Manager (LCM) von DSC für die Verwendung von DebugMode
konfigurieren, damit der Cache bei jedem Neustart des Hostprozesses neu gestartet wird. Bei Festlegung auf $true
wird die PowerShell DSC-Ressource von der Engine immer neu geladen. Sobald Sie mit dem Schreiben Ihrer Ressource fertig sind, können Sie sie wieder auf $false
festlegen, und die Engine setzt wieder auf das Verhalten der Zwischenspeicherung der Module zurück.
In der folgenden Demonstration wird verdeutlicht, wie DebugMode
den Cache automatisch aktualisieren kann. Betrachten wir zunächst die Standardkonfiguration:
Get-DscLocalConfigurationManager
AllowModuleOverwrite : False
CertificateID :
ConfigurationID :
ConfigurationMode : ApplyAndMonitor
ConfigurationModeFrequencyMins : 30
Credential :
DebugMode : {None}
DownloadManagerCustomData :
DownloadManagerName :
LocalConfigurationManagerState : Ready
RebootNodeIfNeeded : False
RefreshFrequencyMins : 15
RefreshMode : PUSH
PSComputerName :
Sie können sehen, dass DebugMode
ist None
.
Zum Einrichten der DebugMode
-Demo verwenden Sie die folgenden PowerShell-Ressource:
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
}
Erstellen Sie nun eine Konfiguration mit dem Namen TestProviderDebugMode
:
Configuration ConfigTestDebugMode
{
Import-DscResource -Name TestProviderDebugMode
Node localhost
{
TestProviderDebugMode test
{
onlyProperty = "blah"
}
}
}
ConfigTestDebugMode
Der Inhalt der Datei $env:SystemDrive\OutputFromTestProviderDebugMode.txt
ist 1
.
Aktualisieren Sie nun den Anbietercode mithilfe des folgenden Skripts:
$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
Dieses Skript generiert eine Zufallszahl und aktualisiert den Anbietercode. Wenn DebugMode
auf FALSE festgelegt ist, wird der Inhalt der Datei $env:SystemDrive\OutputFromTestProviderDebugMode.txt
nie geändert.
Legen Sie DebugMode
nun in Ihrem Konfigurationsskript auf ForceModuleImport
fest:
LocalConfigurationManager
{
DebugMode = "ForceModuleImport"
}
Wenn Sie das Skript erneut ausführen, beachten Sie, dass der Inhalt der Datei jedes Mal anders ist. Sie können ausführen Get-DscConfiguration
, um es zu überprüfen. Der folgende Codeausschnitt zeigt das Ergebnis von zwei weiteren Ausführungen. Ihre Ergebnisse können sich unterscheiden, wenn Sie das Skript ausführen.
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 gibt bei der Registrierung bei Windows-Pullserver „Unerwarteter Antwortcode – InternalServerError“ zurück.
Wenn Sie eine Metakonfiguration auf einen Server anwenden, um ihn bei einer instance von Windows Pull Server zu registrieren, wird möglicherweise der folgende Fehler angezeigt.
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>
Dies kann auftreten, wenn das Zertifikat, das auf dem Server zum Verschlüsseln des Datenverkehrs verwendet wird, einen allgemeinen Namen (Common Name, CN) aufweist, der sich von dem DNS-Namen unterscheidet, der vom Knoten zum Auflösen der URL verwendet wird. Aktualisieren Sie die Windows-Pullserver-Instanz, sodass ein Zertifikat mit einem korrigierten Namen verwendet wird.
Fehler beim Ausführen von Sysprep nach dem Anwenden einer DSC-Konfiguration
Wenn Sie versuchen, Sysprep auszuführen, um einen Windows Server nach dem Anwenden einer DSC-Konfiguration zu generalisieren, erhalten Sie möglicherweise den folgenden Fehler.
SYSPRP LaunchDll:Failure occurred while executing 'DscCore.dll,SysPrep_Cleanup', returned error code 0x2
Das Generalisieren eines Servers nach der Konfiguration mit Windows PowerShell Desired State Configuration ist kein unterstütztes Szenario. Wenden Sie stattdessen erst Konfigurationen auf Windows an, nachdem die Phase „Specialize“ (Spezialisierung) des Windows-Setups abgeschlossen ist.
Weitere Informationen
Konzepte
Weitere Ressourcen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für