Debugowanie zasobów DSC

Dotyczy: Windows PowerShell 5.0

W programie PowerShell 5.0 wprowadzono nową funkcję w Desired State Configuration (DSC), która umożliwia debugowanie zasobu DSC w miarę stosowania konfiguracji.

Włączanie debugowania DSC

Aby można było debugować zasób, należy włączyć debugowanie, wywołując polecenie cmdlet Enable-DscDebug . To polecenie cmdlet przyjmuje obowiązkowy parametr BreakAll.

Możesz sprawdzić, czy debugowanie zostało włączone, sprawdzając wynik wywołania polecenia Get-DscLocalConfigurationManager.

Następujące dane wyjściowe programu PowerShell pokazują wynik włączania debugowania:

PS C:\DebugTest> $LCM = Get-DscLocalConfigurationManager

PS C:\DebugTest> $LCM.DebugMode
NONE

PS C:\DebugTest> Enable-DscDebug -BreakAll

PS C:\DebugTest> $LCM = Get-DscLocalConfigurationManager

PS C:\DebugTest> $LCM.DebugMode
ForceModuleImport
ResourceScriptBreakAll

PS C:\DebugTest>

Uruchamianie konfiguracji z włączonym debugowaniem

Aby debugować zasób DSC, należy uruchomić konfigurację, która wywołuje ten zasób. W tym przykładzie przyjrzymy się prostej konfiguracji, która wywołuje zasób WindowsFeature , aby upewnić się, że zainstalowano funkcję "WindowsPowerShellWebAccess":

Configuration PSWebAccess
    {
    Import-DscResource -ModuleName 'PsDesiredStateConfiguration'
    Node localhost
        {
        WindowsFeature PSWA
            {
            Name = 'WindowsPowerShellWebAccess'
            Ensure = 'Present'
            }
        }
    }
PSWebAccess

Po skompilowaniu konfiguracji uruchom ją, wywołując polecenie Start-DscConfiguration. Konfiguracja zostanie zatrzymana, gdy lokalne Configuration Manager (LCM) wywołuje pierwszy zasób w konfiguracji. Jeśli używasz -Verbose parametrów i -Wait , w danych wyjściowych zostaną wyświetlone wiersze, które należy wprowadzić, aby rozpocząć debugowanie.

Start-DscConfiguration .\PSWebAccess -Wait -Verbose
VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' = SendConfigurationApply,'className' = MSFT_DSCLocalConfiguration
Manager,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguration'.
VERBOSE: An LCM method call arrived from computer TEST-SRV with user sid S-1-5-21-2127521184-1604012920-1887927527-108583.
VERBOSE: An LCM method call arrived from computer TEST-SRV with user sid S-1-5-21-2127521184-1604012920-1887927527-108583.
VERBOSE: [TEST-SRV]: LCM:  [ Start  Set      ]
WARNING: [TEST-SRV]:                            [DSCEngine] Warning LCM is in Debug 'ResourceScriptBreakAll' mode.  Resource script processing will
be stopped to wait for PowerShell script debugger to attach.
VERBOSE: [TEST-SRV]:                            [DSCEngine] Importing the module C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\PSDesiredStateCo
nfiguration\DscResources\MSFT_RoleResource\MSFT_RoleResource.psm1 in force mode.
VERBOSE: [TEST-SRV]: LCM:  [ Start  Resource ]  [[WindowsFeature]PSWA]
VERBOSE: [TEST-SRV]: LCM:  [ Start  Test     ]  [[WindowsFeature]PSWA]
VERBOSE: [TEST-SRV]:                            [[WindowsFeature]PSWA] Importing the module MSFT_RoleResource in force mode.
WARNING: [TEST-SRV]:                            [[WindowsFeature]PSWA] Resource is waiting for PowerShell script debugger to attach.
Use the following commands to begin debugging this resource script:
Enter-PSSession -ComputerName TEST-SRV -Credential <credentials>
Enter-PSHostProcess -Id 9000 -AppDomainName DscPsPluginWkr_AppDomain
Debug-Runspace -Id 9

W tym momencie LCM nazwał zasób i przyszedł do pierwszego punktu przerwania. Ostatnie trzy wiersze w danych wyjściowych pokazują, jak dołączyć do procesu i rozpocząć debugowanie skryptu zasobu.

Debugowanie skryptu zasobu

Uruchom nowe wystąpienie środowiska PowerShell ISE. W okienku konsoli wprowadź ostatnie trzy wiersze danych wyjściowych z Start-DscConfiguration danych wyjściowych jako polecenia, zastępując <credentials> ciąg prawidłowymi poświadczeniami użytkownika. Powinien zostać wyświetlony monit podobny do następującego:

[TEST-SRV]: [DBG]: [Process:9000]: [RemoteHost]: PS C:\DebugTest>>

Skrypt zasobu zostanie otwarty w okienku skryptu, a debuger zostanie zatrzymany w pierwszym wierszu funkcji Test-TargetResource (metoda Test() zasobu opartego na klasie. Teraz możesz użyć poleceń debugowania w środowisku ISE, aby przejść przez skrypt zasobu, przyjrzeć się wartościom zmiennych, wyświetlić stos wywołań itd. Należy pamiętać, że każdy wiersz skryptu zasobu (lub klasy) jest ustawiany jako punkt przerwania.

Wyłączanie debugowania DSC

Po wywołaniu polecenia Enable-DscDebug wszystkie wywołania polecenia Start-DscConfiguration spowodują podzielenie konfiguracji na debuger. Aby umożliwić normalne uruchamianie konfiguracji, należy wyłączyć debugowanie, wywołując polecenie cmdlet Disable-DscDebug .

Uwaga

Ponowne uruchomienie nie zmienia stanu debugowania menedżera LCM. Jeśli debugowanie jest włączone, uruchomienie konfiguracji nadal spowoduje przerwanie debugera po ponownym uruchomieniu.

Zobacz też