> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/fr/developpement/debugging-scripts.md).

# Débogage de scripts

Déboguez les scripts PowerShell Universal à l'aide de Wait-Debugger, de la console de débogage intégrée ou de Visual Studio Code, dans les tâches, les applis et les API.

Les scripts qui s'exécutent dans Universal s'exécutent dans des processus en arrière-plan ou des espaces d'exécution, ce qui peut rendre difficile le débogage de ce qui se passe dans un script. Vous pouvez utiliser des applets de commande comme Write-Debug et Write-Verbose pour fournir plus d'information dans les journaux des applis et des tâches.

## Débogueur distant Visual Studio

À l'aide de l'[extension Visual Studio Code pour PowerShell Universal](/powershell-universal/fr/developpement/visual-studio-code-extension.md), vous pouvez vous connecter directement à vos scripts PowerShell exécutant PowerShell Universal.

## Débogueur intégré

{% hint style="warning" %}
Le débogueur intégré est pris en charge dans PowerShell 7 et dans les environnements intégrés. Il n'est pas pris en charge dans Windows PowerShell.
{% endhint %}

Le débogueur intégré permet d'accéder à une console de débogage pour les scripts en cours d'exécution. Vous pouvez inclure l'appel à l'applet de commande `Wait-Debugger` dans vos scripts et ceux-ci passeront à l'état In Breakpoint. Une fois que cela se produit, vous pouvez afficher la tâche pour exécuter des commandes contre le script.

### Scripts

PowerShell Universal s'intègre directement au débogueur PowerShell. Vous pouvez inclure `Wait-Debugger` dans vos scripts pour les faire mettre en pause.

Par exemple, supposons que vous avez un script comprenant un appel à `Wait-Debugger`. La première ligne s'exécutera, puis le script se mettra en pause lorsqu'il atteindra la deuxième ligne.

<pre class="language-powershell"><code class="lang-powershell"><strong>$Processes = Get-Process
</strong><strong>Wait-Debugger
</strong></code></pre>

Une fois qu'un script est en pause, vous verrez un terminal pour déboguer le script.

Vous pouvez ensuite utiliser les commandes de débogage intégrées pour parcourir le script pas à pas.

### Applis

Vous pouvez utiliser `Wait-Debugger` directement dans vos applis PowerShell Universal. Vous pouvez inclure cette commande dans les gestionnaires d'événements et les dynamiques pour mettre en pause l'exécution de l'appli et évaluer l'état actuel du script.

Par exemple, vous pouvez inclure `Wait-Debugger` dans une dynamique.

```powershell
New-UDApp -Title 'PowerShell Universal' -Content {
     New-UDDynamic -Id 'dynamic' -Content {
        Wait-Debugger
        New-UDTypography "Loaded"
    } -LoadingComponent {
        New-UDSkeleton
    }
}
```

Le résultat est que l'appli affichera le squelette de chargement parce que le débogueur PowerShell est à un point d'arrêt.

Dans la console d'administration, vous pouvez cliquer sur l'onglet Debugger pour afficher les points d'arrêt actuels sur lesquels l'appli attend. Le débogueur fournit un terminal pour évaluer des commandes contre l'espace d'exécution. Vous pouvez utiliser n'importe quelle commande PowerShell standard. Vous pouvez aussi utiliser les outils de débogage comme l'exécution pas à pas et l'affichage du code source. Des boutons sont disponibles en haut de la console.

Vous pouvez utiliser des commandes comme `Get-Variable` pour obtenir de l'information sur l'état des variables. Exécutez `c` pour permettre au terminal de poursuivre son exécution.

## Journalisation des scripts

Certains aspects d'Universal journalisent leurs scripts automatiquement. D'autres fonctionnalités peuvent exiger que vous journalisiez vous-même.

### API

Vous pouvez utiliser la vue Live Log de l'onglet Log pour consulter les journaux de l'API sélectionnée.

### Tâches

Les tâches journalisent abondamment. Vous verrez la sortie de la console et du pipeline. Si vous définissez `$DebugPreference` ou `$VerbosePreference`, vous verrez aussi ces flux dans la sortie de la console. Vous pouvez ajouter d'autres messages de journal à l'aide de `Write-Debug` ou `Write-Verbose`.

### Applis

Les applis journalisent des messages d'information, d'avertissement et d'erreur dans leur journal. Il est recommandé d'utiliser la journalisation au démarrage d'une appli plutôt que d'essayer d'attacher un débogueur. Vous pouvez aussi utiliser la variable `$DebugPreference` pour obtenir de l'information supplémentaire pendant le démarrage de votre appli.

```powershell
$DebugPreference = 'Continue'

New-UDApp -Title 'Test' -Content {
    Write-Debug "My app is loading. I have am $user with $roles"

    New-UDTypography -Text 'Hello, world'
}
```

### Authentification et autorisation

Vous pouvez utiliser la vue Live Log dans les pages d'authentification et de rôle pour voir la sortie des flux PowerShell.

## Débogage de scripts à partir d'une console PowerShell

Vous pouvez déboguer n'importe quel script dans Universal (ou n'importe quel processus PowerShell, en fait) à l'aide des applets de commande de débogage disponibles dans PowerShell. Ces applets de commande vous permettent de vous connecter à des processus PowerShell locaux, comme Universal, et de parcourir vos scripts pas à pas directement dans le terminal.

### Mise en pause du script

D'abord, vous devrez vous assurer que le script attendra que vous connectiez le débogueur avant de poursuivre. Cela signifie que vous devrez inclure une commande `Wait-Debugger` quelque part dans votre script.

{% hint style="info" %}
Les applis n'attendent que 10 secondes au démarrage, donc y placer un Wait-Debugger peut ne pas fonctionner. Vous devriez vous fier à l'utilisation de $DebugPreference et de Write-Debug pour diagnostiquer les problèmes de démarrage des applis.
{% endhint %}

### Exécution de votre script

Maintenant que votre script est configuré pour se mettre en pause et attendre le débogueur, vous voudrez exécuter votre script. Pour les tâches, démarrez simplement la tâche. Pour les API, vous devrez faire une requête à l'API via le terminal que vous essayez de tester. Pour les applis, vous voudrez charger la page dans votre navigateur. Pour l'authentification et l'autorisation, vous voudrez vous connecter.

### Trouver l'ID de votre processus

Une fois que vous avez votre commande `Wait-Debugger` dans le script que vous voulez déboguer, vous devrez démarrer le script et déterminer le processus dans lequel il s'exécute.

#### Tâches

Les tâches s'exécutent dans leur propre processus isolé au sein d'Universal. Tout ce que vous aurez à faire est de démarrer la tâche et elle démarrera le processus et attendra à votre commande `Wait-Debugger`. Une fois votre tâche démarrée, vous pouvez utiliser l'applet de commande `Get-UAJob` pour trouver l'ID de processus de cette tâche.

#### API

Les API s'exécutent dans un seul processus PowerShell. Aucun nouveau processus n'est démarré pour chaque appel d'API. Vous pouvez localiser le processus d'API en trouvant le processus pwsh ou PowerShell dont la ligne de commande comprend `StartApi`.

#### Applis

Les applis s'exécutent dans leur propre processus PowerShell isolé. L'ID du processus est indiqué dans le tableau des applis de la console d'administration.

#### Authentification et autorisation

Les scripts d'authentification et d'autorisation s'exécutent dans le serveur Universal. Vous pouvez trouver le processus `Universal.Server.exe` et vous y attacher.

**Environnement intégré**

Toute fonctionnalité s'exécutant dans l'environnement intégré s'exécutera dans le processus `Universal.Server.exe`. Vous devrez vous attacher à ce processus pour les déboguer.

### S'attacher au processus et déboguer l'espace d'exécution

Une fois que vous avez le processus auquel vous voulez vous attacher, vous pouvez le faire à l'aide de `Enter-PSHostProcess`. Spécifiez simplement l'ID de processus que vous avez trouvé à l'étape précédente.

```powershell
Enter-PSHostProcess -id 1231
```

{% hint style="info" %}
Enter-PSHostProcess utilise des canaux nommés et exige que vous ayez la permission d'accéder au processus auquel vous accédez. Si vous exécutez Universal en tant que service, vous devrez peut-être l'exécuter sous votre compte local pour vous connecter correctement au processus.
{% endhint %}

Une fois attaché au processus, vous voudrez maintenant trouver l'espace d'exécution où votre code s'exécute. Pour ce faire, vous pouvez utiliser l'applet de commande `Get-Runspace`. Cela retournera une liste des espaces d'exécution actuellement actifs dans votre processus. Recherchez l'espace d'exécution marqué `InBreakpoint`. C'est l'espace d'exécution qui attend à la commande `Wait-Debugger`.

Maintenant que vous avez trouvé votre espace d'exécution, utilisez `Debug-Runspace` pour vous y attacher. Vous aurez maintenant la possibilité d'émettre des commandes de débogage contre cet espace d'exécution. Vous pouvez consulter l'état des variables, émettre des commandes et même parcourir le script pas à pas.

Pour une liste complète des commandes de débogage, vous pouvez consulter la [documentation de Microsoft ici](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_debuggers?view=powershell-7#starting-and-stopping-the-debugger).

### Exemple de connexion à un processus d'API

Voici un exemple de la façon de se connecter à un processus d'API.

```powershell
$Process = Get-Process pwsh | Where-Object { $_.CommandLine.Contains('StartApi') }
Enter-PSHostProcess -Id $Process.Id
Get-Runspace
Debug-Runspace -Id 2
```

## Débogage avec Visual Studio Code

Pour déboguer un script, vous pouvez utiliser l'applet de commande Wait-Debugger dans votre script pour mettre le script en pause jusqu'à ce qu'un débogueur soit attaché. Vous pouvez ensuite utiliser un débogueur, comme VS Code, pour vous attacher au processus et à l'espace d'exécution afin de consulter les variables, parcourir le code pas à pas et exécuter des commandes de débogage.

Vous pouvez aussi déboguer des scripts à l'aide des applets de commande intégrées `Enter-PSHostProcess`, `Get-Runspace` et `Debug-Runspace`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/powershell-universal/fr/developpement/debugging-scripts.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
