Rozwiązywanie problemów z platformą DSC
Dotyczy: Windows PowerShell 4.0, Windows PowerShell 5.1
Ten artykuł zawiera instrukcje rozwiązywania problemów z typowymi błędami.
Zależność usługi WinRM
Windows PowerShell Desired State Configuration (DSC) zależy od usługi WinRM. Usługa WinRM nie jest domyślnie włączona w systemach Windows Server 2008 R2 i Windows 7. Uruchom polecenie Set-WSManQuickConfig
w sesji z podwyższonym poziomem uprawnień Windows PowerShell, aby włączyć usługę WinRM.
Using Get-DscConfigurationStatus
Polecenie cmdlet Get-DscConfigurationStatus pobiera informacje o stanie konfiguracji z węzła docelowego. Polecenie zwraca bogaty obiekt, który zawiera ogólne informacje o tym, czy przebieg konfiguracji zakończył się pomyślnie, czy nie. Aby dowiedzieć się więcej o uruchomieniu konfiguracji, możesz zapoznać się z obiektem, na przykład:
- Każdy zasób, który zakończył się niepowodzeniem.
- Każdy zasób, który zażądał ponownego uruchomienia.
- Meta-Configuration ustawienia podczas uruchamiania konfiguracji.
Następujący zestaw parametrów zwraca informacje o stanie ostatniego uruchomienia konfiguracji:
Get-DscConfigurationStatus [-CimSession <CimSession[]>]
[-ThrottleLimit <int>]
[-AsJob]
[<CommonParameters>]
Poniższy zestaw parametrów zwraca informacje o stanie dla każdego uruchomienia konfiguracji:
Get-DscConfigurationStatus -All
[-CimSession <CimSession[]>]
[-ThrottleLimit <int>]
[-AsJob]
[<CommonParameters>]
Przykład
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 :
Mój skrypt nie zostanie uruchomiony: diagnozowanie błędów skryptu przy użyciu dzienników DSC
Podobnie jak wszystkie oprogramowanie systemu Windows, DSC rejestruje błędy i zdarzenia w dziennikach, które są dostępne do przeglądu w Podgląd zdarzeń. Badanie tych dzienników może pomóc zrozumieć, dlaczego określona operacja nie powiodła się i jak zapobiec awarii w przyszłości. Aby ułatwić śledzenie błędów podczas tworzenia, użyj zasobu dziennika DSC, aby śledzić postęp konfiguracji w dzienniku zdarzeń analizy DSC.
Gdzie znajdują się dzienniki zdarzeń DSC?
W Podgląd zdarzeń zdarzenia DSC znajdują się w: Dzienniki aplikacji i usług/Microsoft/Windows/Desired State Configuration
Aby wyświetlić dzienniki zdarzeń, możesz uruchomić odpowiednie polecenie cmdlet programu PowerShell Get-WinEvent:
PS C:\> Get-WinEvent -LogName "Microsoft-Windows-Dsc/Operational"
ProviderName: Microsoft-Windows-DSC
TimeCreated Id LevelDisplayName Message
----------- -- ---------------- -------
11/17/2014 10:27:23 PM 4102 Information Job {02C38626-D95A-47F1-9DA2-C1D44A7128E7} :
Podstawowa nazwa dziennika DSC to Microsoft-Windows-DSC>> (inne nazwy dzienników w systemie Windows nie są tutaj wyświetlane w celu zwięzłości). Nazwa podstawowa dołącza do nazwy kanału, aby utworzyć pełną nazwę dziennika.
Aparat DSC zapisuje głównie w trzech typach dzienników: dzienniki operacyjne, analityczne i debugowania. Ponieważ dzienniki analityczne i debugowania nie są domyślnie włączone, należy je włączyć w Podgląd zdarzeń. W tym celu:
Otwórz Podgląd zdarzeń przez:
- Wpisywanie
Show-EventLog
w Windows PowerShell - Wybierz przycisk Start, a następnie Panel sterowania, Narzędzia administracyjne, a następnie Podgląd zdarzeń.
- Wpisywanie
W menu Widok w Podglądzie zdarzeń wybierz pozycję Pokaż dzienniki analityczne i debugowania.
Nazwa dziennika kanału analitycznego to
Microsoft-Windows-Dsc/Analytic
, a kanał debugowania toMicrosoft-Windows-Dsc/Debug
.
Możesz również użyć narzędzia wevtutil , aby włączyć dzienniki, jak pokazano w poniższym przykładzie.
wevtutil.exe set-log "Microsoft-Windows-Dsc/Analytic" /q:true /e:true
Możesz też użyć programu PowerShell i platformy .NET, aby włączyć dzienniki, jak pokazano w poniższym przykładzie:
$logName = 'Microsoft-Windows-Dsc/Analytic'
$log = New-Object System.Diagnostics.Eventing.Reader.EventLogConfiguration $logName
$log.IsEnabled = $true
$log.SaveChanges()
Co zawierają dzienniki DSC?
Dzienniki DSC do trzech różnych kanałów dziennika na podstawie ważności komunikatu. Dziennik operacyjny w usłudze DSC zawiera wszystkie komunikaty o błędach i jest przydatny do identyfikowania problemu. Dziennik analityczny zawiera większą liczbę zdarzeń i może zidentyfikować, gdzie wystąpiły błędy. Ten kanał zawiera również wszystkie emitowane pełne komunikaty. Dziennik debugowania zawiera dzienniki, które mogą pomóc zrozumieć, jak wystąpiły błędy. Komunikaty o zdarzeniach DSC zaczynają się od identyfikatora zadania, który jednoznacznie reprezentuje operację DSC. Poniższy przykład próbuje pobrać komunikat z pierwszego zdarzenia zarejestrowanego w operacyjnym dzienniku DSC.
PS C:\> $AllDscOpEvents = Get-WinEvent -LogName "Microsoft-Windows-Dsc/Operational"
PS C:\> $FirstOperationalEvent = $AllDscOpEvents[0]
PS C:\> $FirstOperationalEvent.Message
Job {02C38626-D95A-47F1-9DA2-C1D44A7128E7} :
Consistency engine was run successfully.
DsC rejestruje zdarzenia ze strukturą, która umożliwia użytkownikowi zbieranie zdarzeń z jednego zadania DSC. Struktura jest następująca:
Job ID : <Guid>
<Event Message>
Zbieranie zdarzeń z pojedynczej operacji DSC
Dzienniki zdarzeń DSC zawierają zdarzenia generowane przez różne operacje DSC. Jednak zwykle zajmujesz się szczegółami konkretnej operacji. Wszystkie dzienniki DSC można grupować według właściwości identyfikatora zadania, która jest unikatowa dla każdej operacji DSC. Identyfikator zadania jest wyświetlany jako pierwsza wartość właściwości we wszystkich zdarzeniach DSC. W poniższych krokach wyjaśniono, jak gromadzić wszystkie zdarzenia w strukturze tablicy zgrupowanej.
<##########################################################################
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}
W tym miejscu zmienna $SeparateDscOperations
zawiera dzienniki pogrupowane według identyfikatorów zadań. Każdy element tablicy tej zmiennej reprezentuje grupę zdarzeń rejestrowanych przez inną operację DSC, umożliwiając dostęp do dodatkowych informacji o dziennikach.
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} : ...
Dane w zmiennej $SeparateDscOperations
można wyodrębnić przy użyciu metody Where-Object.
Poniżej przedstawiono pięć scenariuszy, w których można wyodrębnić dane na potrzeby rozwiązywania problemów z konfiguracją DSC:
1: Błędy operacji
Wszystkie zdarzenia mają poziomy ważności. Te informacje są przydatne do identyfikowania zdarzeń błędów:
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: Szczegóły operacji uruchamianych w ciągu ostatniej pół godziny
TimeCreated
, właściwość każdego zdarzenia systemu Windows, określa czas utworzenia zdarzenia. Porównywanie tej właściwości z określonym obiektem daty/godziny jest przydatne do filtrowania wszystkich zdarzeń:
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: Komunikaty z najnowszej operacji
Najnowsza operacja jest przechowywana w pierwszym indeksie grupy $SeparateDscOperations
tablicy .
Zapytanie dotyczące komunikatów grupy dla indeksu 0 zwraca wszystkie komunikaty dla najnowszej operacji:
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. Komunikaty o błędach zarejestrowane dla ostatnich operacji, które zakończyły się niepowodzeniem
$SeparateDscOperations[0].Group
zawiera zestaw zdarzeń dla najnowszej operacji. Uruchom polecenie cmdlet, Where-Object
aby filtrować zdarzenia na podstawie ich nazwy wyświetlanej na poziomie. Wyniki są przechowywane w zmiennej $myFailedEvent
, co można dodatkowo rozciągnąć, aby uzyskać komunikat o zdarzeniu:
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: Wszystkie zdarzenia wygenerowane dla określonego identyfikatora zadania.
$SeparateDscOperations
jest tablicą grup, z których każda ma nazwę jako unikatowy identyfikator zadania. Where-Object
Uruchamiając polecenie cmdlet, można wyodrębnić te grupy zdarzeń, które mają określony identyfikator zadania:
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} : ...
Analizowanie dzienników DSC przy użyciu narzędzia xDscDiagnostics
xDscDiagnostics to moduł programu PowerShell, który składa się z kilku funkcji, które mogą pomóc w analizowaniu błędów DSC na maszynie. Te funkcje mogą pomóc w zidentyfikowaniu wszystkich zdarzeń lokalnych z poprzednich operacji DSC lub zdarzeń DSC na komputerach zdalnych. W tym miejscu termin operacja DSC definiuje pojedyncze unikatowe wykonanie DSC od początku do końca. Na przykład Test-DscConfiguration
może to być oddzielna operacja DSC. Podobnie każde inne polecenie cmdlet w usłudze DSC, takie jak Get-DscConfiguration
i Start-DscConfiguration
, jest możliwe do zidentyfikowania jako oddzielne operacje DSC. Aby uzyskać więcej informacji na temat funkcji diagnostycznych, zobacz xDscDiagnostics.
Uzyskiwanie szczegółów operacji DSC
Funkcja Get-xDscOperation
umożliwia znajdowanie wyników operacji DSC uruchamianych na co najmniej jednym komputerze. Funkcja zwraca obiekt, który zawiera kolekcję zdarzeń generowanych przez każdą operację DSC. Na przykład w poniższych danych wyjściowych uruchomiono trzy polecenia. Pierwszy przeszedł, a pozostałe dwa nie powiodły się. Dane wyjściowe podsumowania Get-xDscOperation
tych wyników.
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...
Wyniki można uzyskać tylko dla najnowszych operacji, określając parametr Najnowszy :
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...
Uzyskiwanie szczegółów zdarzeń DSC
Polecenie Trace-xDscOperation
cmdlet zwraca obiekt zawierający kolekcję zdarzeń, ich typy zdarzeń i dane wyjściowe komunikatu wygenerowane na podstawie określonej operacji DSC. Zazwyczaj w przypadku znalezienia błędu w dowolnej operacji przy użyciu polecenia Get-xDscOperation
można śledzić tę operację w celu znalezienia zdarzeń, które spowodowały awarię.
Użyj parametru , SequenceID
aby pobrać zdarzenia dla określonej operacji dla określonego komputera.
Jeśli na przykład określisz SequenceID
wartość 9, Trace-xDscOperation
pobierz ślad operacji DSC, która była 9. z ostatniej operacji:
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.
Przekaż identyfikator GUID przypisany do określonej operacji DSC (zwróconej przez Get-xDscOperation
polecenie cmdlet), aby uzyskać szczegóły zdarzenia dla tej operacji DSC:
PS C:\DiagnosticsTest> Trace-xDscOperation -JobID 9e0bfb6b-3a3a-11e6-9165-00155d390509
ComputerName EventType TimeCreated Message
------------ --------- ----------- -------
SRV1 OPERATIONAL 6/24/2016 11:36:56 AM Operation Consistency Check or Pull started by user sid S-1-5-20 from computer NULL.
SRV1 ANALYTIC 6/24/2016 11:36:56 AM Deleting file from C:\Windows\System32\Configuration\DSCEngineCache.mof
SRV1 OPERATIONAL 6/24/2016 11:36:56 AM Running consistency engine.
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: [] Starting consistency engine.
SRV1 ANALYTIC 6/24/2016 11:36:56 AM Applying configuration from C:\Windows\System32\Configuration\Current.mof.
SRV1 ANALYTIC 6/24/2016 11:36:56 AM Parsing the configuration to apply.
SRV1 OPERATIONAL 6/24/2016 11:36:56 AM Resource execution sequence :: [WindowsFeature]DSCServiceFeature, [xDSCWebService]PSDSCPullServer.
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: LCM: [ Start Resource ] [[WindowsFeature]DSCServiceFeature]
SRV1 ANALYTIC 6/24/2016 11:36:56 AM Executing operations for PS DSC resource MSFT_RoleResource with resource name [WindowsFeature]DSC...
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: LCM: [ Start Test ] [[WindowsFeature]DSCServiceFeature]
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: [[WindowsFeature]DSCServiceFeature] The operation 'Get...
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: [[WindowsFeature]DSCServiceFeature] The operation 'Get...
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: LCM: [ End Test ] [[WindowsFeature]DSCServiceFeature] True in 0.3130 sec...
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: LCM: [ End Resource ] [[WindowsFeature]DSCServiceFeature]
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: LCM: [ Start Resource ] [[xDSCWebService]PSDSCPullServer]
SRV1 ANALYTIC 6/24/2016 11:36:56 AM Executing operations for PS DSC resource MSFT_xDSCWebService with resource name [xDSCWebService]P...
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: LCM: [ Start Test ] [[xDSCWebService]PSDSCPullServer]
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: [[xDSCWebService]PSDSCPullServer] Check Ensure
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: [[xDSCWebService]PSDSCPullServer] Check Port
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: [[xDSCWebService]PSDSCPullServer] Check Physical Path ...
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: [[xDSCWebService]PSDSCPullServer] Check State
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: [[xDSCWebService]PSDSCPullServer] Get Full Path for We...
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: LCM: [ End Test ] [[xDSCWebService]PSDSCPullServer] True in 0.0160 seconds.
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: LCM: [ End Resource ] [[xDSCWebService]PSDSCPullServer]
SRV1 VERBOSE 6/24/2016 11:36:56 AM [SRV1]: [] Consistency check completed.
SRV1 ANALYTIC 6/24/2016 11:36:56 AM Deleting file from C:\Windows\System32\Configuration\DSCEngineCache.mof
SRV1 OPERATIONAL 6/24/2016 11:36:56 AM Consistency engine was run successfully.
SRV1 OPERATIONAL 6/24/2016 11:36:56 AM Job runs under the following LCM setting. ...
SRV1 OPERATIONAL 6/24/2016 11:36:56 AM Operation Consistency Check or Pull completed successfully.
SRV1 ANALYTIC 6/24/2016 11:36:56 AM Deleting file from C:\Windows\System32\Configuration\DSCEngineCache.mof
Należy pamiętać, że ponieważ Trace-xDscOperation
agreguje zdarzenia z dzienników analitycznych, debugowania i operacyjnych, monituje o włączenie tych dzienników.
Alternatywnie możesz zebrać informacje o zdarzeniach, zapisując dane wyjściowe Trace-xDscOperation
w zmiennej. Aby wyświetlić wszystkie zdarzenia dla określonej operacji DSC, można użyć następujących poleceń.
PS C:\DiagnosticsTest> $Trace = Trace-xDscOperation -SequenceID 4
PS C:\DiagnosticsTest> $Trace.Event
Spowoduje to wyświetlenie tych samych wyników co Get-WinEvent
polecenie cmdlet, na przykład w następujących danych wyjściowych:
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.
Najlepiej jest najpierw użyć Get-xDscOperation
polecenia , aby wyświetlić listę ostatnich kilku przebiegów konfiguracji DSC na maszynach. W tym celu można zbadać dowolną pojedynczą operację, określając jej identyfikator SequenceID lub JobID , Trace-xDscOperation
aby dowiedzieć się, co zrobiła za kulisami.
Pobieranie zdarzeń dla komputera zdalnego
ComputerName
Użyj parametru Trace-xDscOperation
polecenia cmdlet, aby uzyskać szczegóły zdarzenia na komputerze zdalnym. Przed wykonaniem tej czynności należy utworzyć regułę zapory, aby umożliwić zdalne administrowanie na komputerze zdalnym:
New-NetFirewallRule -Name "Service RemoteAdmin" -DisplayName "Remote" -Action Allow
Teraz możesz określić ten komputer w wywołaniu metody 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...
Moje zasoby nie będą aktualizowane: Jak zresetować pamięć podręczną
Aparat DSC buforuje zasoby zaimplementowane jako moduł programu PowerShell na potrzeby wydajności. Może to jednak spowodować problemy podczas tworzenia zasobu i testowania go jednocześnie, ponieważ rozszerzenie DSC ładuje wersję z pamięci podręcznej do momentu ponownego uruchomienia procesu. Jedynym sposobem na załadowanie dsC nowszej wersji jest jawne zabicie procesu hostowania aparatu DSC.
Podobnie po uruchomieniu Start-DscConfiguration
polecenia , po dodaniu i zmodyfikowaniu zasobu niestandardowego modyfikacja może nie zostać wykonana, chyba że komputer zostanie uruchomiony ponownie lub dopóki. Dzieje się tak, ponieważ rozszerzenie DSC działa w procesie hosta dostawcy WMI (WmiPrvSE
), a zwykle istnieje wiele wystąpień środowiska WmiPrvSE uruchomionego jednocześnie. Po ponownym uruchomieniu proces hosta zostanie uruchomiony ponownie i wyczyści pamięć podręczną.
Aby pomyślnie odzyskać konfigurację i wyczyścić pamięć podręczną bez ponownego uruchamiania, należy zatrzymać, a następnie ponownie uruchomić proces hosta. Może to być na poszczególnych wystąpieniach, gdzie można zidentyfikować proces, zatrzymać go i uruchomić ponownie. Możesz też użyć polecenia DebugMode
, jak pokazano poniżej, aby ponownie załadować zasób DSC programu PowerShell.
Aby zidentyfikować proces hostujący aparat DSC, wyświetl identyfikator WmiPrvSE
procesu , który hostuje aparat DSC. Następnie, aby zaktualizować dostawcę, zatrzymaj WmiPrvSE
proces przy użyciu poniższych poleceń, a następnie uruchom Start-DscConfiguration
ponownie.
###
### 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
Korzystanie z trybu DebugMode
Można skonfigurować Configuration Manager lokalne DSC (LCM), aby zawsze DebugMode
czyścić pamięć podręczną po ponownym uruchomieniu procesu hosta. Gdy jest ustawiona wartość $true
, powoduje to, że aparat zawsze ponownie ładuje zasób DSC programu PowerShell. Po zakończeniu pisania zasobu możesz ustawić go z powrotem na $false
, a aparat powróci do jego zachowania buforowania modułów.
Poniżej przedstawiono DebugMode
sposób automatycznego odświeżania pamięci podręcznej. Najpierw przyjrzyjmy się konfiguracji domyślnej:
Get-DscLocalConfigurationManager
AllowModuleOverwrite : False
CertificateID :
ConfigurationID :
ConfigurationMode : ApplyAndMonitor
ConfigurationModeFrequencyMins : 30
Credential :
DebugMode : {None}
DownloadManagerCustomData :
DownloadManagerName :
LocalConfigurationManagerState : Ready
RebootNodeIfNeeded : False
RefreshFrequencyMins : 15
RefreshMode : PUSH
PSComputerName :
Widać, że DebugMode
to None
.
Aby skonfigurować DebugMode
pokaz, użyj następującego zasobu programu PowerShell:
function Get-TargetResource {
param (
[Parameter(Mandatory)] $onlyProperty
)
$Path = "$env:SystemDrive\OutputFromTestProviderDebugMode.txt"
return @{
onlyProperty = Get-Content -Path $Path
}
}
function Set-TargetResource {
param (
[Parameter(Mandatory)] $onlyProperty
)
"1" | Out-File -PSPath "$env:SystemDrive\OutputFromTestProviderDebugMode.txt"
}
function Test-TargetResource {
param (
[Parameter(Mandatory)]
$onlyProperty
)
return $false
}
Teraz utwórz konfigurację o nazwie TestProviderDebugMode
:
Configuration ConfigTestDebugMode
{
Import-DscResource -Name TestProviderDebugMode
Node localhost
{
TestProviderDebugMode test
{
onlyProperty = "blah"
}
}
}
ConfigTestDebugMode
Zawartość pliku $env:SystemDrive\OutputFromTestProviderDebugMode.txt
to 1
.
Teraz zaktualizuj kod dostawcy przy użyciu następującego skryptu:
$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
Ten skrypt generuje losową liczbę i aktualizuje kod dostawcy. W przypadku DebugMode
ustawienia wartości false zawartość pliku $env:SystemDrive\OutputFromTestProviderDebugMode.txt
nigdy nie jest zmieniana.
Teraz ustaw wartość na DebugMode
ForceModuleImport
w skryscie konfiguracji:
LocalConfigurationManager
{
DebugMode = "ForceModuleImport"
}
Po ponownym uruchomieniu skryptu pamiętaj, że zawartość pliku jest inna za każdym razem. Możesz uruchomić polecenie Get-DscConfiguration
, aby go sprawdzić. Poniższy fragment kodu przedstawia wynik dwóch kolejnych przebiegów. Wyniki mogą być inne podczas uruchamiania skryptu.
PS C:\> Get-DscConfiguration -CimSession (New-CimSession localhost)
onlyProperty PSComputerName
------------ --------------
20 localhost
PS C:\> Get-DscConfiguration -CimSession (New-CimSession localhost)
onlyProperty PSComputerName
------------ --------------
14 localhost
Rozszerzenie DSC zwraca błąd InternalServerError "nieoczekiwany kod odpowiedzi" podczas rejestrowania w systemie Windows Pull Server
Podczas stosowania metakonfiguracji do serwera w celu zarejestrowania go w wystąpieniu systemu Windows Pull Server może wystąpić następujący błąd.
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>
Taka sytuacja może wystąpić, gdy certyfikat używany na serwerze do szyfrowania ruchu ma nazwę pospolitą (CN), która różni się od nazwy DNS używanej przez węzeł w celu rozpoznania adresu URL. Zaktualizuj wystąpienie serwera ściągania systemu Windows, aby użyć certyfikatu z poprawioną nazwą.
Błąd podczas uruchamiania narzędzia Sysprep po zastosowaniu konfiguracji DSC
Podczas próby uruchomienia narzędzia Sysprep w celu uogólnienia systemu Windows Server po zastosowaniu konfiguracji DSC może wystąpić następujący błąd.
SYSPRP LaunchDll:Failure occurred while executing 'DscCore.dll,SysPrep_Cleanup', returned error code 0x2
Uogólnienie serwera po skonfigurowaniu go przy użyciu Windows PowerShell Desired State Configuration nie jest obsługiwanym scenariuszem. Zamiast tego zastosuj konfiguracje do systemu Windows po zakończeniu fazy specjalizacyjnego instalatora systemu Windows.