> For the complete documentation index, see [llms.txt](https://docs.realmjoin.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.realmjoin.com/fr/dev-reference/interacting-with-runbooks.md).

# Interaction avec les runbooks

Exécutez des runbooks et interrogez leur état à l’aide de l’API de RealmJoin

## Aperçu

RealmJoin vous permet d'utiliser des runbooks Azure Automation pour automatiser les opérations quotidiennes dans votre environnement. Voir [Runbooks](/fr/automatisation/runbooks.md) pour plus d'informations.

L'API de RealmJoin vous permet de démarrer des runbooks depuis votre application, afin de vérifier si des exécutions précédemment déclenchées se sont terminées avec succès. Voir [la référence de l’API de RealmJoin](https://customer-api.realmjoin.com/scalar/v1) pour voir quelles opérations sont actuellement prises en charge.

Les sections suivantes expliquent comment utiliser l'API de RealmJoin pour démarrer et suivre des tâches de runbook. Il est supposé que vous avez déjà [connecté un compte Azure Automation](/fr/automatisation/connecting-azure-automation.md) à RealmJoin Portal. Assurez-vous également de [authentifier ](/fr/dev-reference/realmjoin-api/authentication.md)chaque requête envoyée à l’API de RealmJoin à l’aide d’un en-tête http Authorization approprié.

## Comment Azure Automation gère-t-il les runbooks ?

Azure Automation adopte une approche de traitement par lots pour les runbooks. Lorsque vous déclenchez l'exécution d'un runbook, une tâche est créée pour ce runbook et mise en file d'attente pour exécution.

En général, un runbook ne démarre donc pas immédiatement. De plus, plusieurs tâches du même runbook peuvent exister en même temps à différents états d'exécution.

Chaque tâche possède un ensemble de paramètres (entrées) transmis au script du runbook. Cela peut par exemple être deux variables comme `$username` et `$newEmailAddress` si le runbook est censé ajouter un alias e-mail à la boîte aux lettres d'un utilisateur.

Chaque tâche a un statut qui représente son état d'exécution actuel, voir [Microsoft Docs](https://docs.microsoft.com/en-us/azure/automation/automation-runbook-execution#job-statuses). Nous nous concentrerons sur `En file d'attente`, `En cours d'exécution`, `Terminé` et `Échoué` dans ce document. Sachez qu'il s'agit d'une simplification pour faciliter la compréhension.

## Démarrage d'une tâche de runbook

L'API de RealmJoin propose deux points de terminaison pour déclencher des runbooks.

`run` exécutera un runbook de manière synchrone et ne renverra/terminera son traitement que lorsque le runbook sera réellement terminé ou aura échoué. Ce point de terminaison renvoie directement l'état de réussite et la sortie de la tâche de runbook associée.

`start` prendra les mêmes paramètres que `run` mais fonctionne de manière asynchrone. Il renverra dès qu'une tâche de runbook est mise en file d'attente. Il renverra le `jobID` afin de faciliter le suivi de la nouvelle tâche.

### Nom des runbooks

Les runbooks sont adressés par leur nom dans Azure Automation. En bref :

* Est-il synchronisé depuis le dépôt GitHub de RealmJoin ? Ajoutez `rjgit-`comme préfixe
* Soit `org_`, `device_`, `group_`, `user_` comme périmètre (exactement l'un de ceux-ci)
* Une catégorie, comme `general_`ou `security_`
* Le nom du runbook, séparé par `_` comme `add-xyz-exception`

Le résultat dans ce cas serait : `rjgit-org_security_add-xyz-exception`

Voir [Conventions de nommage](/fr/automatisation/runbooks/naming-conventions.md) pour plus de détails.

### Exemple

Supposons la situation suivante :

* Vous avez vos identifiants de l’API de RealmJoin et les avez encodés en `dC0xMjM0MTIzNDpteVMzY3JldCE=` (Base64)
* Vous souhaitez démarrer le runbook `rjgit-user_security_revoke-or-restore-access` pour bloquer la connexion d'un utilisateur spécifique
* Les paramètres du runbook (PowerShell) sont :
  * `$UserName = "someone@contoso.com"`
  * `$Revoke = $true`

Nous utiliserons le `run` point de terminaison pour savoir immédiatement si la tâche a réussi.

Construisons le **demande**:

En-têtes :

```http
Authorization: Basic dC0xMjM0MTIzNDpteVMzY3JldCE=
Content-Type: application/json
```

Requête / URI :

```http
POST https://customer-api.realmjoin.com/runbook/rjgit-user_security_revoke-or-restore-access/run
```

Corps (en notation JSON) :

```json
{ 
   "UserName": "someone@contoso.com", 
   "Revoke": true 
}
```

La requête prendra un certain temps, car elle attend que la tâche s'exécute. Veuillez vous assurer d'adapter en conséquence le délai d'attente de votre client HTTP. Sinon, essayez d'utiliser le `start` point de terminaison, qui renverra immédiatement.

La réponse contiendra le `jobID`, les `statut` (`Échoué` ou `Terminé`) et tous les flux de sortie du runbook.

**Réponse**:

Statut Http : `200` (OK)

Corps (en notation JSON) :

```json
{
    "jobID": "1234545e-7a24-436a-90c9-6056b512345",
    "status": "Terminé",
    "streams": [
        {
            "time": "2021-12-15T14:47:27.7756185+00:00",
            "summary": "RealmJoin.RunbookHelper : En cours d'exécution dans le compte Azure Automation",
            "streamType": "Verbeux",
            "streamText": null,
            "value": null
        },
        {
            "time": "2021-12-15T14:47:27.96063+00:00",
            "summary": "getAutomationConnectionOrFromLocalCertificate : Obtention de la connexion d'automatisation 'AzureRunAsConnection'",
            "streamType": "Verbeux",
            "streamText": null,
            "value": null
        },
        {
            "time": "2021-12-15T14:47:31.560861+00:00",
            "summary": "Connect-RjRbAzureAD : Connexion avec le module AzureAD : ...",
            "streamType": "Verbeux",
            "streamText": null,
            "value": null
        },
        {
            "time": "2021-12-15T14:47:33.8860333+00:00",
            "summary": "## L'accès de l'utilisateur someone@contoso.com a été révoqué.",
            "streamType": "Sortie",
            "streamText": null,
            "value": null
        }
    ]
}
```

Les flux de sortie sont séparés en différents canaux (`streamTypes`): `Sortie`, `Verbeux`, `Erreur`. Cela permet de filtrer les erreurs ou de réduire la sortie uniquement aux informations pertinentes en n'affichant que `Sortie`.

Vous pouvez obtenir ces flux une fois qu'un runbook est terminé en utilisant le `/runbook/jobs/{jobID}/output/streams` point de terminaison. (voir ci-dessous)

## Interrogation du statut et de la sortie d'une tâche

Si une tâche a déjà été créée, vous pouvez utiliser l'API de RealmJoin pour interroger son état et sa sortie.

### Interrogation du statut de la tâche

Utilisez `/runbook/jobs/{jobID}/status` pour interroger le statut actuel.

Voir [Authentification ](/fr/dev-reference/realmjoin-api/authentication.md)sur la création d'un en-tête Authorization, ce qui suit n'est qu'un exemple.

Supposons le `jobID` être `1234545e-7a24-436a-90c9-6056b512345`

**`Demande`**

En-têtes :

```http
Authorization: Basic dC0xMjM0MTIzNDpteVMzY3JldCE=
Content-Type: application/json
```

Requête / URI :

```html
GET https://customer-api.realmjoin.com/runbook/jobs/1234545e-7a24-436a-90c9-6056b512345/status
```

Cette requête n'a pas de corps.

**Réponse**

Statut HTTP 200 (OK)

Corps (texte brut)

```
Terminé
```

Les autres états possibles incluent `Nouveau`, `Échoué`, `En cours d'exécution`. Voir [états possibles du runbook](https://docs.microsoft.com/en-us/azure/automation/automation-runbook-execution#job-statuses).

### Lecture de la sortie de la tâche

Utilisez `/runbook/jobs/{jobID}/output/text` pour obtenir une représentation simple en texte brut de la sortie d'un runbook. Cela n'inclura pas le `Verbeux` et `Erreur` flux. Voir [lecture des flux](#reading-specific-streams) pour lire d'autres flux. [Exceptions](#reading-exceptions) sont gérés séparément.

Voir [Authentification ](/fr/dev-reference/realmjoin-api/authentication.md)sur la création d'un en-tête Authorization, ce qui suit n'est qu'un exemple.

Supposons le `jobID` être `1234545e-7a24-436a-90c9-6056b512345`

**Demande**

En-têtes :

```http
Authorization: Basic dC0xMjM0MTIzNDpteVMzY3JldCE=
Content-Type: application/json
```

Requête / URI :

```html
GET https://customer-api.realmjoin.com/runbook/jobs/1234545e-7a24-436a-90c9-6056b512345/output/text
```

Cette requête n'a pas de corps.

**Réponse**

Statut HTTP 200 (OK)

Corps (texte brut)

```
## Le groupe de distribution 'Sales Team' a été créé.
```

### Lecture de flux spécifiques

Utilisez `/runbook/jobs/{jobID}/output/streams` pour obtenir une représentation JSON complète de la sortie d'un runbook. Ainsi, vous pouvez accéder au `Sortie`, `Verbeux` et `Erreur` flux. [Exceptions](#reading-exceptions) sont gérés séparément.

Voir [Authentification ](/fr/dev-reference/realmjoin-api/authentication.md)sur la création d'un en-tête Authorization, ce qui suit n'est qu'un exemple.

Supposons le `jobID` être `1234545e-7a24-436a-90c9-6056b512345`

**Requête (tous les flux)**

En-têtes :

```http
Authorization: Basic dC0xMjM0MTIzNDpteVMzY3JldCE=
Content-Type: application/json
```

Requête / URI :

```html
GET https://customer-api.realmjoin.com/runbook/jobs/1234545e-7a24-436a-90c9-6056b512345/output/streams
```

Cette requête n'a pas de corps.

**Réponse**

Statut HTTP 200 (OK)

Corps (JSON, tableau de messages)

```json
[
    {
        "time": "2021-12-20T08:37:46.8572747+00:00",
        "summary": "Chargement du module depuis le chemin 'C:\\Modules\\User\\RealmJoin.RunbookHelper\\RealmJoin.RunbookHelper.psd1'.",
        "streamType": "Verbeux",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:46.9272241+00:00",
        "summary": "Chargement du module depuis le chemin 'C:\\Modules\\User\\RealmJoin.RunbookHelper\\RealmJoin.RunbookHelper.psm1'.",
        "streamType": "Verbeux",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:47.1522235+00:00",
        "summary": "RealmJoin.RunbookHelper : En cours d'exécution dans le compte Azure Automation",
        "streamType": "Verbeux",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:47.3122219+00:00",
        "summary": "Sortie normale",
        "streamType": "Sortie",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:47.8422225+00:00",
        "summary": "Message verbeux ou de débogage",
        "streamType": "Verbeux",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:47.7672223+00:00",
        "summary": "Message d'erreur non bloquant",
        "streamType": "Erreur",
        "streamText": null,
        "value": null
    }
]
```

Voir ci-dessous pour lire les messages d'erreur bloquants et [exceptions](#reading-exceptions)

Pour ne recevoir qu'un seul flux, par exemple Verbeux, vous pouvez ajouter un filtre à la requête en ajoutant `?streamTypes=Verbose`. Vous pouvez également filtrer pour `Sortie` et `Erreur`.

**Requête (filtre pour un seul flux)**

En-têtes :

```http
Authorization: Basic dC0xMjM0MTIzNDpteVMzY3JldCE=
Content-Type: application/json
```

Requête / URI :

```html
GET https://customer-api.realmjoin.com/runbook/jobs/1234545e-7a24-436a-90c9-6056b512345/output/streams?streamTypes=Verbose
```

Cette requête n'a pas de corps.

**Réponse**

Statut HTTP 200 (OK)

Corps (JSON, tableau de messages)

```json
[
    {
        "time": "2021-12-20T08:37:46.8572747+00:00",
        "summary": "Chargement du module depuis le chemin 'C:\\Modules\\User\\RealmJoin.RunbookHelper\\RealmJoin.RunbookHelper.psd1'.",
        "streamType": "Verbeux",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:46.9272241+00:00",
        "summary": "Chargement du module depuis le chemin 'C:\\Modules\\User\\RealmJoin.RunbookHelper\\RealmJoin.RunbookHelper.psm1'.",
        "streamType": "Verbeux",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:47.1522235+00:00",
        "summary": "RealmJoin.RunbookHelper : En cours d'exécution dans le compte Azure Automation",
        "streamType": "Verbeux",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:47.8422225+00:00",
        "summary": "Message verbeux ou de débogage",
        "streamType": "Verbeux",
        "streamText": null,
        "value": null
    }
]
```

### Lecture des exceptions

Utilisez `/runbook/jobs/{jobID}/exception/text` pour obtenir une représentation simple en texte brut du message d'exception d'un runbook (s'il est présent). Cela n'inclura pas les `Sortie`, `Verbeux` et `Erreur` flux. Voir [lecture des flux](#reading-specific-streams) pour lire d'autres flux.

Les exceptions sont écrites lorsqu'une erreur bloquante se produit lors de l'exécution du script PowerShell associé au runbook. Ce point de terminaison ne lit que le message en texte brut et n'inclut pas de détails techniques, comme la ligne de code à laquelle le script s'est arrêté.

Dans notre exemple, une erreur bloquante a été causée par `throw "Exception"`.

Voir [Authentification ](/fr/dev-reference/realmjoin-api/authentication.md)sur la création d'un en-tête Authorization, ce qui suit n'est qu'un exemple.

Supposons le `jobID` être `1234545e-7a24-436a-90c9-6056b512345`

**Demande**

En-têtes :

```http
Authorization: Basic dC0xMjM0MTIzNDpteVMzY3JldCE=
Content-Type: application/json
```

Requête / URI :

```html
GET https://customer-api.realmjoin.com/runbook/jobs/1234545e-7a24-436a-90c9-6056b512345/exception/text
```

Cette requête n'a pas de corps.

**Réponse**

Statut HTTP 200 (OK)

Corps (texte brut)

```
Exception (Exception)
```


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.realmjoin.com/fr/dev-reference/interacting-with-runbooks.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
