> 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/pt/dev-reference/interacting-with-runbooks.md).

# Interagir com Runbooks

## Visão geral

RealmJoin permite usar Runbooks do Azure Automation para automatizar as operações do dia a dia no seu ambiente. Veja [Runbooks](/pt/automacao/runbooks.md) para mais informações.

A API do RealmJoin permite iniciar runbooks a partir da sua aplicação, para consultar a execução bem-sucedida de execuções acionadas anteriormente. Veja [a descrição Swagger do RealmJoin](https://customer-api.realmjoin.com/swagger/index.html) para ver quais operações são suportadas atualmente.

As seções a seguir explicam como usar a API do RealmJoin para iniciar e acompanhar jobs de runbook. Pressupõe-se que você já tenha [conectado a uma conta do Azure Automation](/pt/automacao/connecting-azure-automation.md) ao Portal do RealmJoin. Além disso, certifique-se de [autenticar ](/pt/dev-reference/realmjoin-api/authentication.md)todas as requisições à API do RealmJoin usando um cabeçalho HTTP Authorization apropriado.

## Como o Azure Automation lida com runbooks?

O Azure Automation adota uma abordagem de processamento em lote em relação aos runbooks. Quando você aciona a execução de um runbook, um job é criado para esse runbook e colocado na fila para execução.

Portanto, em geral, um runbook não iniciará imediatamente. Além disso, vários jobs para o mesmo runbook podem existir ao mesmo tempo em diferentes estados de execução.

Cada job tem um conjunto de parâmetros (entradas) que são passados para o script do runbook. Isso pode ser, por exemplo, duas variáveis como `$username` e `$newEmailAddress` se o runbook deverá adicionar um alias de e-mail à caixa de correio de um usuário.

Cada job tem um status que representa seu estado atual de execução, veja [Microsoft Docs](https://docs.microsoft.com/en-us/azure/automation/automation-runbook-execution#job-statuses). Vamos focar em `Em fila`, `Em execução`, `Concluído` e `Falhado` neste documento. Tenha em mente que isso é uma simplificação para facilitar a compreensão.

## Iniciando um job de runbook

A API do RealmJoin oferece dois endpoints para acionar runbooks.

`run` executará um runbook de forma síncrona e só retornará/encerrará quando o runbook estiver realmente concluído ou falhado. Esse endpoint retorna diretamente o estado de sucesso e a saída do job de runbook associado.

`start` aceitará os mesmos parâmetros que `run` mas funciona de forma assíncrona. Ele retornará assim que um job de runbook for colocado na fila. Ele retornará o `jobID` para permitir o rastreamento fácil do novo job.

### Nomeação de runbooks

Os runbooks são referenciados pelo nome no Azure Automation. Em resumo:

* Está sincronizado do repositório GitHub do RealmJoin? Adicione `rjgit-`como prefixo
* Ou `org_`, `device_`, `group_`, `user_` como escopo (exatamente um destes)
* Uma categoria, como `general_`ou `security_`
* O nome do runbook, separado por `_` como `add-xyz-exception`

O resultado neste caso seria: `rjgit-org_security_add-xyz-exception`

Veja [Convenções de Nomenclatura](/pt/automacao/runbooks/naming-conventions.md) para mais detalhes.

### Exemplo

Vamos assumir a seguinte situação:

* Você tem suas credenciais da API do RealmJoin e as codificou em `dC0xMjM0MTIzNDpteVMzY3JldCE=` (Base64)
* Você deseja iniciar o runbook `rjgit-user_security_revoke-or-restore-access` para bloquear o login de um usuário específico
* Os parâmetros do runbook (PowerShell) são:
  * `$UserName = "someone@contoso.com"`
  * `$Revoke = $true`

Usaremos o `run` endpoint para saber imediatamente se o job foi bem-sucedido.

Vamos montar a **requisição**:

Cabeçalhos:

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

Requisição / URI:

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

Corpo (em notação JSON):

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

A requisição levará algum tempo, pois aguarda a execução do job. Certifique-se de ajustar o timeout do seu cliente HTTP adequadamente. Caso contrário, tente usar o `start` endpoint, que retornará imediatamente.

A resposta conterá o `jobID`, o `status` (`Falhado` ou `Concluído`) e todos os fluxos de saída do runbook.

**Resposta**:

Status HTTP: `200` (OK)

Corpo (em notação JSON):

```json
{
    "jobID": "1234545e-7a24-436a-90c9-6056b512345",
    "status": "Concluído",
    "streams": [
        {
            "time": "2021-12-15T14:47:27.7756185+00:00",
            "summary": "RealmJoin.RunbookHelper: Executando na conta do Azure Automation",
            "streamType": "Verboso",
            "streamText": null,
            "value": null
        },
        {
            "time": "2021-12-15T14:47:27.96063+00:00",
            "summary": "getAutomationConnectionOrFromLocalCertificate: Obtendo conexão de automação 'AzureRunAsConnection'",
            "streamType": "Verboso",
            "streamText": null,
            "value": null
        },
        {
            "time": "2021-12-15T14:47:31.560861+00:00",
            "summary": "Connect-RjRbAzureAD: Conectando com o módulo AzureAD: ...",
            "streamType": "Verboso",
            "streamText": null,
            "value": null
        },
        {
            "time": "2021-12-15T14:47:33.8860333+00:00",
            "summary": "## O acesso do usuário someone@contoso.com foi revogado.",
            "streamType": "Saída",
            "streamText": null,
            "value": null
        }
    ]
}
```

Os fluxos de saída são separados em diferentes canais (`streamTypes`): `Saída`, `Verbose`, `Error`. Isso permite filtrar erros ou reduzir a saída apenas às informações relevantes, mostrando apenas `Saída`.

Você pode obter esses fluxos depois que um runbook terminar usando o `/runbook/jobs/{jobID}/output/streams` endpoint. (veja abaixo)

## Consultando o status e a saída de um job

Se um job já tiver sido criado, você pode usar a API do RealmJoin para consultar seu estado e saída.

### Consultando o status do job

Use `/runbook/jobs/{jobID}/status` para consultar o status atual.

Veja [Autenticação ](/pt/dev-reference/realmjoin-api/authentication.md)sobre como criar um cabeçalho Authorization, o seguinte é apenas um exemplo.

Considere o `jobID` como sendo `1234545e-7a24-436a-90c9-6056b512345`

**`Solicitar`**

Cabeçalhos:

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

Requisição / URI:

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

Esta requisição não tem corpo.

**Resposta**

Status HTTP 200 (OK)

Corpo (texto puro)

```
Concluído
```

Outros estados possíveis incluem `Novo`, `Falhado`, `Em execução`. Veja [estados possíveis do runbook](https://docs.microsoft.com/en-us/azure/automation/automation-runbook-execution#job-statuses).

### Lendo a saída do job

Use `/runbook/jobs/{jobID}/output/text` para obter uma representação simples em texto puro da saída de um runbook. Isso não incluirá o `Verbose` e `Error` fluxo. Veja [leitura de fluxos](#reading-specific-streams) para ler outros fluxos. [Exceções](#reading-exceptions) são tratadas separadamente.

Veja [Autenticação ](/pt/dev-reference/realmjoin-api/authentication.md)sobre como criar um cabeçalho Authorization, o seguinte é apenas um exemplo.

Considere o `jobID` como sendo `1234545e-7a24-436a-90c9-6056b512345`

**Solicitar**

Cabeçalhos:

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

Requisição / URI:

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

Esta requisição não tem corpo.

**Resposta**

Status HTTP 200 (OK)

Corpo (texto puro)

```
## O grupo de distribuição 'Sales Team' foi criado.
```

### Lendo fluxos específicos

Use `/runbook/jobs/{jobID}/output/streams` para obter uma representação JSON completa da saída de um runbook. Dessa forma, você pode acessar o `Saída`, `Verbose` e `Error` fluxo. [Exceções](#reading-exceptions) são tratadas separadamente.

Veja [Autenticação ](/pt/dev-reference/realmjoin-api/authentication.md)sobre como criar um cabeçalho Authorization, o seguinte é apenas um exemplo.

Considere o `jobID` como sendo `1234545e-7a24-436a-90c9-6056b512345`

**Requisição (todos os fluxos)**

Cabeçalhos:

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

Requisição / URI:

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

Esta requisição não tem corpo.

**Resposta**

Status HTTP 200 (OK)

Corpo (JSON, array de mensagens)

```json
[
    {
        "time": "2021-12-20T08:37:46.8572747+00:00",
        "summary": "Carregando módulo do caminho 'C:\\Modules\\User\\RealmJoin.RunbookHelper\\RealmJoin.RunbookHelper.psd1'.",
        "streamType": "Verboso",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:46.9272241+00:00",
        "summary": "Carregando módulo do caminho 'C:\\Modules\\User\\RealmJoin.RunbookHelper\\RealmJoin.RunbookHelper.psm1'.",
        "streamType": "Verboso",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:47.1522235+00:00",
        "summary": "RealmJoin.RunbookHelper: Executando na conta do Azure Automation",
        "streamType": "Verboso",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:47.3122219+00:00",
        "summary": "Saída regular",
        "streamType": "Saída",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:47.8422225+00:00",
        "summary": "Mensagem Verbosa ou de depuração",
        "streamType": "Verboso",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:47.7672223+00:00",
        "summary": "Mensagem de erro não interruptiva",
        "streamType": "Erro",
        "streamText": null,
        "value": null
    }
]
```

Veja abaixo para ler mensagens de erro interruptivas e [exceções](#reading-exceptions)

Para receber apenas um único fluxo, por exemplo Verbose, você pode adicionar um filtro à requisição adicionando `?streamTypes=Verbose`. Você também pode filtrar por `Saída` e `Error`.

**Requisição (filtrar por um único fluxo)**

Cabeçalhos:

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

Requisição / URI:

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

Esta requisição não tem corpo.

**Resposta**

Status HTTP 200 (OK)

Corpo (JSON, array de mensagens)

```json
[
    {
        "time": "2021-12-20T08:37:46.8572747+00:00",
        "summary": "Carregando módulo do caminho 'C:\\Modules\\User\\RealmJoin.RunbookHelper\\RealmJoin.RunbookHelper.psd1'.",
        "streamType": "Verboso",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:46.9272241+00:00",
        "summary": "Carregando módulo do caminho 'C:\\Modules\\User\\RealmJoin.RunbookHelper\\RealmJoin.RunbookHelper.psm1'.",
        "streamType": "Verboso",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:47.1522235+00:00",
        "summary": "RealmJoin.RunbookHelper: Executando na conta do Azure Automation",
        "streamType": "Verboso",
        "streamText": null,
        "value": null
    },
    {
        "time": "2021-12-20T08:37:47.8422225+00:00",
        "summary": "Mensagem Verbosa ou de depuração",
        "streamType": "Verboso",
        "streamText": null,
        "value": null
    }
]
```

### Lendo exceções

Use `/runbook/jobs/{jobID}/exception/text` para obter uma representação simples em texto puro da mensagem de exceção de um runbook (se presente). Isso não incluirá os `Saída`, `Verbose` e `Error` fluxos. Veja [leitura de fluxos](#reading-specific-streams) para ler outros fluxos.

As exceções são registradas quando ocorrem erros interruptivos na execução do script PowerShell associado ao runbook. Este endpoint lê apenas a mensagem em texto puro e não inclui detalhes técnicos, como em qual linha de código o script parou.

Em nosso exemplo, um erro interruptivo foi causado por `throw "Exception"`.

Veja [Autenticação ](/pt/dev-reference/realmjoin-api/authentication.md)sobre como criar um cabeçalho Authorization, o seguinte é apenas um exemplo.

Considere o `jobID` como sendo `1234545e-7a24-436a-90c9-6056b512345`

**Solicitar**

Cabeçalhos:

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

Requisição / URI:

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

Esta requisição não tem corpo.

**Resposta**

Status HTTP 200 (OK)

Corpo (texto puro)

```
Exceção (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 dynamically by asking a question.

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

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

The question should be specific, self-contained, and written in natural language.
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.
