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.