Partilhar via


Depurar os recursos de DSC

Aplica-se a: Windows PowerShell 5.0

No PowerShell 5.0, foi introduzida uma nova funcionalidade no Desired State Configuration (DSC) que lhe permite depurar um recurso DSC à medida que está a ser aplicada uma configuração.

Ativar a depuração do DSC

Antes de poder depurar um recurso, tem de ativar a depuração ao chamar o cmdlet Enable-DscDebug . Este cmdlet utiliza um parâmetro obrigatório, BreakAll.

Pode verificar se a depuração foi ativada ao analisar o resultado de uma chamada para Get-DscLocalConfigurationManager.

A seguinte saída do PowerShell mostra o resultado da ativação da depuração:

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>

Iniciar uma configuração com a depuração ativada

Para depurar um recurso DSC, inicie uma configuração que chame esse recurso. Neste exemplo, vamos analisar uma configuração simples que chama o recurso WindowsFeature para garantir que a funcionalidade "WindowsPowerShellWebAccess" está instalada:

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

Depois de compilar a configuração, inicie-a ao chamar Start-DscConfiguration. A configuração irá parar quando o Configuration Manager Local (LCM) chamar para o primeiro recurso na configuração. Se utilizar os -Verbose parâmetros e -Wait , o resultado apresenta as linhas que precisa de introduzir para iniciar a depuração.

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

Neste momento, o LCM chamou o recurso e chegou ao primeiro ponto de interrupção. As três últimas linhas na saída mostram-lhe como anexar ao processo e começar a depurar o script de recursos.

Depurar o script de recursos

Inicie uma nova instância do ISE do PowerShell. No painel da consola, introduza as últimas três linhas de saída da Start-DscConfiguration saída como comandos, substituindo <credentials> por credenciais de utilizador válidas. Deverá ver agora um pedido semelhante a:

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

O script de recursos será aberto no painel de script e o depurador é parado na primeira linha da função Test-TargetResource (o método Test() de um recurso baseado na classe). Agora, pode utilizar os comandos de depuração no ISE para percorrer o script de recursos, analisar os valores das variáveis, ver a pilha de chamadas e assim sucessivamente. Lembre-se de que cada linha no script de recursos (ou classe) está definida como um ponto de interrupção.

Desativar a depuração do DSC

Depois de chamar Enable-DscDebug, todas as chamadas para Start-DscConfiguration resultarão na interrupção da configuração no depurador. Para permitir que as configurações funcionem normalmente, tem de desativar a depuração ao chamar o cmdlet Disable-DscDebug .

Nota

Reiniciar não altera o estado de depuração do LCM. Se a depuração estiver ativada, iniciar uma configuração continuará a entrar no depurador após um reinício.

Consulte também