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

  1. 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ń.
  2. 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 to Microsoft-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 $SeparateDscOperationstablicy . 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-xDscOperationmoż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-DscConfigurationpolecenia , 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 WmiPrvSEprocesu , 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 DebugModeForceModuleImport 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.

Zobacz też

Pojęcia

Inne zasoby