Depurando os recursos de DSCDebugging DSC resources

Aplica-se a: Windows PowerShell 5.0Applies To: Windows PowerShell 5.0

No PowerShell 5.0, foi introduzido um novo recurso na Configuração de Estado Desejado (DSC) que permite depurar um recurso de DSC como uma configuração que está sendo aplicada.In PowerShell 5.0, a new feature was introduced in Desired State Configuraiton (DSC) that allows you to debug a DSC resource as a configuration is being applied.

Habilitando a depuração de DSCEnabling DSC debugging

Para poder depurar um recurso, é preciso habilitar a depuração chamando o cmdlet Enable-DscDebug.Before you can debug a resource, you have to enable debugging by calling the Enable-DscDebug cmdlet. Esse cmdlet usa um parâmetro obrigatório, o BreakAll.This cmdlet takes a mandatory parameter, BreakAll.

É possível verificar se a depuração foi habilitada analisando o resultado de uma chamada para o Get-DscLocalConfigurationManager.You can verify that debugging has been enabled by looking at the result of a call to Get-DscLocalConfigurationManager.

A seguinte saída do PowerShell mostra o resultado de habilitar a depuração:The following PowerShell output shows the result of enabling debugging:

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>

Iniciando uma configuração com a depuração habilitadaStarting a configuration with debug enabled

Para depurar um recurso de DSC, inicie uma configuração que chame esse recurso.To debug a DSC resource, you start a configuration that calls that resource. Para este exemplo, analisaremos uma configuração simples que chame o recurso WindowsFeature a fim de garantir que o recurso "WindowsPowerShellWebAccess" seja instalado:For this example, we'll look at a simple configuration that calls the WindowsFeature resource to ensure that the "WindowsPowerShellWebAccess" feature is installed:

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

Depois de compilar a configuração, inicie chamando Start-DscConfiguration.After compiling the configuration, start it by calling Start-DscConfiguration. A configuração parará quando o LCM (Gerenciador de Configurações Local) chamar o primeiro recurso na configuração.The configuration will stop when the Local Configuration Manager (LCM) calls into the first resource in the configuration. Se você usar os parâmetros -Verbose e -Wait, a saída exibirá as linhas que você precisa inserir para iniciar a depuração.If you use the -Verbose and -Wait parameters, the output displays the lines you need to enter to start debugging.

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

Nesse ponto, o LCM chama o recurso e vai até o primeiro ponto de interrupção.At this point, the LCM has called the resource, and come to the first break point. As três últimas linhas na saída mostram como anexar ao processo e iniciar a depuração do script do recurso.The last three lines in the output show you how to attach to the process and start debugging the resource script.

Depurando o script de recursoDebugging the resource script

Inicie uma nova instância do ISE do PowerShell.Start a new instance of the PowerShell ISE. No painel do console, digite as três últimas linhas da saída Start-DscConfiguration como comandos, substituindo <credentials> por credenciais de usuário válidas.In the console pane, enter the last three lines of output from the Start-DscConfiguration output as commands, replacing <credentials> with valid user credentials. Agora você verá um prompt semelhante a:You should now see a prompt that looks similar to:

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

O script de recurso será aberto no painel de script e o depurador será interrompido na primeira linha da função Test-TargetResource (o método Test() de um recurso baseado em classe).The resource script will open in the script pane, and the debugger is stopped at the first line of the Test-TargetResource function (the Test() method of a class-based resource). Agora você pode usar os comandos de depuração no ISE para percorrer o script de recurso, examinar os valores das variáveis, exibir a pilha de chamadas e assim por diante.Now you can use the debug commands in the ISE to step through the resource script, look at variable values, view the call stack, and so on. Para obter informações sobre como depurar no ISE do PowerShell, confira How to Debug Scripts in Windows PowerShell ISE (Como depurar scripts no ISE do Windows PowerShell).For information about debugging in the PowerShell ISE, see How to Debug Scripts in Windows PowerShell ISE. Lembre-se de que toda linha no script de recurso (ou classe) é definida como um ponto de interrupção.Remember that every line in the resource script (or class) is set as a break point.

Desabilitando a depuração de DSCDisabling DSC debugging

Depois de chamar Enable DscDebug, todas as chamadas a Start-DscConfiguration resultarão na interrupção do depurador pela configuração.After calling Enable-DscDebug, all calls to Start-DscConfiguration will result in the configuration breaking into the debugger. Para permitir que as configurações sejam executadas normalmente, você deve desabilitar a depuração chamando o cmdlet Disable-DscDebug.To allow configurations to run normally, you must disable debugging by calling the Disable-DscDebug cmdlet.

Observação: a reinicialização não altera o estado de depuração do LCM.Note: Rebooting does not change the debug state of the LCM. Se a depuração estiver desabilitada, iniciar uma configuração ainda interromperá o depurador após uma reinicialização.If debugging is enabled, starting a configuration will still break into the debugger after a reboot.

Consulte TambémSee Also