> 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/api/error-handling.md).

# Gestion des erreurs

Gérez les erreurs dans les API REST de PowerShell Universal en configurant ErrorAction, en retournant des codes de statut personnalisés et en lisant les erreurs dans Windows PowerShell.

Par défaut, les terminaux retournent un message 200 OK même s'il y a des erreurs. Si une erreur se produit, vous obtiendrez une réponse vide du terminal. Ce document présente différentes façons de gérer les erreurs dans les API.

## Retour automatique des erreurs

Pour retourner automatiquement les erreurs des API, vous pouvez modifier le comportement par défaut en définissant le paramètre `-ErrorAction` de `New-PSUEndpoint` à `Stop`. Toute erreur entraînera le retour d'une erreur 500 Internal Server Error accompagnée d'une liste des erreurs et de la trace de la pile.

Les erreurs avec arrêt retourneront toujours une erreur 500 Internal Server Error.

```powershell
New-PSUEndpoint -Url "/error" -Endpoint { 
   throw "Uh oh!"
} -ErrorAction stop

New-PSUEndpoint -Url /error2 -Endpoint {
    Write-Error "Whoa!"
} -ErrorAction Stop
```

Vous remarquerez un comportement différent dans Windows PowerShell et PowerShell 7 lors de l'appel d'API REST qui retournent des erreurs. Dans Windows PowerShell, vous recevrez une erreur générique qui ne retourne pas le message d'erreur.

```powershell
PS C:\Users\adamr> invoke-restmethod http://localhost:5000/error2
invoke-restmethod : The remote server returned an error: (500) Internal Server Error.
At line:1 char:1
+ invoke-restmethod http://localhost:5000/error2
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], Web
   Exception
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
```

Dans PowerShell 7, lorsqu'une erreur est retournée, vous verrez le message d'erreur retourné.

```powershell
PS C:\Users\adamr\Desktop> invoke-restmethod http://localhost:5000/error 

Invoke-RestMethod: Uh oh!
at , : line 2
at , : line 1

PS C:\Users\adamr\Desktop> invoke-restmethod http://localhost:5000/error2

Invoke-RestMethod: Whoa
at , : line 2
at , : line 1
```

Vous pouvez récupérer le message d'erreur dans Windows PowerShell en utilisant la syntaxe suivante.

```powershell
PS C:\Users\adamr> try { invoke-restmethod http://localhost:5000/error2 } catch { [System.IO.StreamReader]::new($_.Exception.Response.GetResponseStream()).ReadToEnd()}
Whoa!
at <ScriptBlock>, <No file>: line 2
at <ScriptBlock>, <No file>: line 1
```

## Retour manuel des erreurs

Pour retourner manuellement les erreurs, vous devez utiliser l'applet de commande `New-PSUApiResponse`. Cette applet de commande vous permet de définir le code de statut et le corps de la réponse.

Dans cet exemple, nous retournons un code d'erreur 404 du terminal.

```powershell
New-PSUEndpoint -Url /broken -Endpoint {
    New-PSUApiResponse -StatusCode 404 -Body 'Failed!'
}
```

Comme pour les codes d'erreur automatiques, les codes d'erreur retournés manuellement s'afficheront mieux dans PowerShell 7. Voici un exemple d'appel du terminal.

```powershell
PS C:\Users\adamr\Desktop> invoke-restmethod http://localhost:5000/broken

Invoke-RestMethod: Failed!
```

Si l'appel est effectué depuis Windows PowerShell, vous recevrez une erreur semblable à celle retournée automatiquement.

```powershell
PS C:\Users\adamr> invoke-restmethod http://localhost:5000/broken
invoke-restmethod : The remote server returned an error: (404) Not Found.
At line:1 char:1
+ invoke-restmethod http://localhost:5000/broken
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], Web
   Exception
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
```

Vous pouvez choisir de retourner des codes d'erreur si certaines conditions sont remplies en utilisant votre script PowerShell dans le terminal.

```powershell
New-PSUEndpoint -Url /user/:name -Endpoint {
    if ($Name -eq 'User')
    {
        @{ UserName = "Adam" }
    }
    else
    {
        New-PSUApiResponse -StatusCode 404 -Body 'Unknown user!'    
    }

}
```

## API

* [New-PSUEndpoint](/powershell-universal/fr/commandes-powershell/new-psuendpoint.md)
* [Get-PSUEndpoint](/powershell-universal/fr/commandes-powershell/get-psuendpoint.md)
* [Remove-PSUEndpoint](/powershell-universal/fr/commandes-powershell/remove-psuendpoint.md)
* [New-PSUApiResponse](/powershell-universal/fr/commandes-powershell/new-psuapiresponse.md)
* [Set-PSUSetting](/powershell-universal/fr/commandes-powershell/set-psusetting.md)


---

# 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/api/error-handling.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.
