> For the complete documentation index, see [llms.txt](https://wiki.datadike.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.datadike.com/es/sonar/administration/automation/scripts.md).

# Biblioteca de scripts

Mantenga la biblioteca de scripts en Management › Scripts: cree, suba, clone, pruebe, marque como favorito, oculte y descargue scripts, y reutilice código con snippets.

## Qué es y cuándo usarlo

La biblioteca de scripts es el único lugar donde SONAR guarda los scripts que ejecuta en los dispositivos. Todo script que se ejecuta desde la consola sale de aquí: **Run Script** en un dispositivo, **Tools › Bulk Script** en muchos, las acciones de script de las tareas automatizadas, los checks de script y las acciones de las plantillas de alerta. Un script lleva sus propios valores predeterminados (shell, argumentos, variables de entorno, tiempo límite, plataformas compatibles), así que quien lo ejecute después solo cambia lo que sea distinto.

Use la biblioteca para escribir un script una sola vez, probarlo en un dispositivo antes de que llegue a todo el parque y guardar bloques de código reutilizables como snippets.

## Antes de empezar

* Un rol con **List Scripts** para abrir la biblioteca, y **Manage Scripts** para crear, subir, clonar, editar o eliminar scripts y snippets. Ambos permisos están en el grupo **Scripts** de **Admin Center › Roles**.
* Para probar un script, **Run Scripts** (grupo **System**) y acceso al dispositivo en el que lo prueba. El dispositivo debe estar en línea.
* En Linux y macOS, un script de tipo **Shell** o **Python** necesita un shebang en su primera línea, por ejemplo `#!/bin/bash` o `#!/usr/bin/python3`.

## Pasos

### Crear un script

1. Abra **Management › Scripts**.
2. Haga clic en el botón **+** y elija **New Script**.
3. Rellene **Name**, **Shell Type** y, si el script no es para todas las plataformas, **Supported Platforms**. Vea la referencia de campos más abajo.
4. Escriba o pegue el código en el editor, a la derecha.
5. Si lo desea, fije **Category**, **Script Arguments**, **Environment vars**, **Timeout (seconds)**, **Run As User (Windows only)** y **Syntax**.
6. Haga clic en **Save**.

### Subir un script desde un archivo

1. Abra **Management › Scripts**, haga clic en **+** y elija **Upload Script**.
2. En **Add Script**, rellene **Name** y elija el archivo en **Script Upload**.
3. Fije **Type**, **Supported Platforms**, **Category**, **Script Arguments**, **Environment Variables** y **Default Timeout** según haga falta.
4. Haga clic en **Add**. El contenido del archivo pasa a ser el cuerpo del script.

### Probar un script en un dispositivo

1. Abra el script con un doble clic, o haga clic en él con el botón derecho y elija **Edit**.
2. En **Agent to run test script on**, en la parte inferior del cuadro de diálogo, elija el dispositivo.
3. Haga clic en **Test Script**. El cuadro de diálogo **Script Test** ejecuta el código que hay en ese momento en el editor, con los argumentos, las variables de entorno, el tiempo límite y la opción **Run As User** del formulario, y espera el resultado.
4. Lea **Run Time**, **Return Code**, **Standard Output** y **Standard Error**.
5. Guarde el script solo cuando el resultado sea el esperado.

La prueba usa lo que hay en el editor, esté guardado o no, así que puede hacer varios intentos sin guardar cada uno.

### Clonar, marcar como favorito, ocultar, descargar o eliminar

Haga clic con el botón derecho en un script de la lista para abrir su menú:

| Entrada del menú                             | Qué hace                                                                                                                                          |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| **View Code**                                | Abre el script en solo lectura, con los snippets ya expandidos                                                                                    |
| **Clone**                                    | Abre para edición una copia llamada `(Copy) <name>`. Es la forma de adaptar un script integrado                                                   |
| **Edit**                                     | Abre el script para editarlo. No está disponible para los scripts integrados                                                                      |
| **Delete**                                   | Elimina el script tras una confirmación. No está disponible para los scripts integrados                                                           |
| **Add as Favorite** / **Remove as Favorite** | Marca el script como favorito. Los favoritos aparecen en **Run Favorited Script** en el menú de acciones de cada dispositivo                      |
| **Download Script**                          | Guarda el script en un archivo con su nombre y la extensión de su shell (`.ps1`, `.bat`, `.py`, `.sh`, `.nu`, `.ts`), con los snippets expandidos |
| **Hide Script** / **Show Script**            | Oculta el script de la biblioteca y de los selectores de scripts con los que se ejecuta                                                           |

Los favoritos y los scripts ocultos son propiedades del script, no del usuario: todos los usuarios de la consola ven los mismos favoritos.

{% hint style="warning" %}
Eliminar un script también elimina los checks de script que lo usan, y lo quita de las acciones de las tareas automatizadas. Compruebe dónde se usa un script antes de eliminarlo. Ocultarlo es la alternativa reversible.
{% endhint %}

### Reutilizar código con snippets

Un snippet es un bloque de código con nombre que SONAR inserta en el cuerpo de un script cuando el script se ejecuta.

1. En **Management › Scripts**, abra el menú ⋮ y elija **Script Snippets**.
2. Haga clic en **New**, rellene **Name**, **Shell Type** y **Description**, escriba el código y haga clic en **Save**.
3. En el cuerpo de cualquier script, escriba el nombre del snippet entre llaves dobles, por ejemplo `{{Write-Log}}`.

Cuando el script se ejecuta, se prueba o se descarga, el marcador de posición se sustituye por el código del snippet. **Edit** muestra el marcador; **View Code** muestra el resultado expandido. Haga doble clic en un snippet para editarlo; haga clic en él con el botón derecho para eliminarlo.

Los marcadores de valores del dispositivo, el cliente, el sitio, los campos personalizados y el almacén de claves, como `{{agent.hostname}}`, funcionan en **Script Arguments** y **Environment vars**, no en el cuerpo del script. Vea [Variables de script](/es/sonar/reference/script-variables.md).

## Qué debe ver

La biblioteca se abre en una tabla con las columnas **Favorites**, **Shell**, **Platforms**, **Name**, **Default Args**, **Category**, **Description** y **Default Timeout (seconds)**. Un script sin plataformas compatibles muestra **All**. Los scripts ocultos aparecen en gris cuando **Show Hidden Scripts** está activado.

El menú ⋮ alterna entre **Table** y **Folders**, y muestra u oculta los scripts integrados con **Show Community Scripts** / **Hide Community Scripts**. La vista de carpetas agrupa los scripts por categoría, y los que no tienen ninguna quedan en **Unassigned**.

Tras **Save** o **Add**, aparece una confirmación como `<name> was added!` o `<name> was edited!` y el script ya está en la lista.

## Cómo verificar que funcionó

1. Busque el script en **Management › Scripts** con el cuadro de búsqueda y compruebe sus columnas **Shell**, **Platforms**, **Default Args** y **Default Timeout (seconds)**.
2. Abra **Run Script** en un dispositivo de una plataforma compatible (vea [Ejecutar un comando o un script en un dispositivo](/es/sonar/administration/automation/run-commands-and-scripts.md)). El script aparece en el selector y sus valores predeterminados rellenan el formulario.
3. Abra **Reports & Audits › Audits**. La creación, la edición y la eliminación de un script se registran como **Add Object**, **Modify Object** y **Delete Object** sobre un **Script**. Una ejecución de prueba se registra como **Execute Script** con el mensaje `<user> tested a script on <device>`.

Una ejecución de prueba no crea una línea en la pestaña **History** del dispositivo; las ejecuciones desde **Run Script**, las acciones masivas y las tareas sí la crean.

## Errores comunes

| Síntoma                                                                                                                | Causa                                                                                                                       | Solución                                                                                                   |
| ---------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| El botón **+** y **Edit** aparecen atenuados, con el mensaje emergente `You don't have permission for this action`     | El rol no tiene **Manage Scripts**                                                                                          | Añada el permiso al rol, o pídaselo a alguien que lo tenga                                                 |
| **Edit** y **Delete** aparecen atenuados, con `Built-in scripts can't be edited` o `Built-in scripts can't be deleted` | El script es integrado                                                                                                      | Use **Clone** y edite la copia                                                                             |
| El editor muestra `Shell/Python scripts on Linux/Mac need a shebang at the top of the script`                          | Un script **Shell** o **Python** no tiene línea `#!`                                                                        | Añada la línea del intérprete al principio. Ignore el aviso en los scripts que solo se ejecutan en Windows |
| **Test Script** sigue desactivado                                                                                      | No se eligió ningún dispositivo, el cuerpo está vacío o el tiempo límite está vacío                                         | Elija un dispositivo en **Agent to run test script on**, añada código y un tiempo límite                   |
| La prueba no devuelve ninguna salida                                                                                   | El dispositivo está fuera de línea, o el script se ejecutó durante todo su tiempo límite                                    | Compruebe el estado del dispositivo, o aumente **Timeout (seconds)** y vuelva a probar                     |
| Un script no aparece en **Run Script**                                                                                 | Está oculto, no es compatible con la plataforma del dispositivo, o es integrado y los scripts de la comunidad están ocultos | Use **Show Script**, añada la plataforma en **Supported Platforms**, o use **Show Community Scripts**      |
| Guardar un snippet falla con `script snippet with this name already exists.`                                           | Los nombres de snippet son únicos                                                                                           | Elija otro nombre                                                                                          |
| **Default Timeout** muestra `Minimum is 5` en **Add Script**                                                           | No se aceptan tiempos límite inferiores a 5 segundos                                                                        | Introduzca 5 o más                                                                                         |

## Referencia de campos

### Script (New Script, Edit)

| Campo                                        | Qué hace                                                                                                                                                                                                                                                          | Valores aceptados                                                       | Predeterminado                    |
| -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | --------------------------------- |
| Name                                         | Identifica el script en la biblioteca y en todos los selectores                                                                                                                                                                                                   | Texto, hasta 255 caracteres                                             | Vacío. Obligatorio                |
| Description                                  | Se muestra en la lista                                                                                                                                                                                                                                            | Texto libre                                                             | Vacío                             |
| Shell Type                                   | Intérprete que ejecuta el script en el dispositivo                                                                                                                                                                                                                | **Powershell**, **Batch**, **Python**, **Shell**, **Nushell**, **Deno** | **Powershell**                    |
| Supported Platforms (All supported if blank) | Limita el script a estas plataformas. Los selectores de un dispositivo solo ofrecen los scripts compatibles con su plataforma                                                                                                                                     | **Windows**, **Linux**, **macOS**, se permiten varias                   | En blanco (todas las plataformas) |
| Category                                     | Agrupa el script en la vista de carpetas. Elija una categoría existente o escriba una nueva                                                                                                                                                                       | Texto, hasta 100 caracteres                                             | Vacío (**Unassigned**)            |
| Script Arguments                             | Argumentos predeterminados, uno por entrada. Pulse Intro después de cada uno. Pueden contener [variables de script](/es/sonar/reference/script-variables.md)                                                                                                      | Texto                                                                   | Ninguno                           |
| Environment vars                             | Variables de entorno predeterminadas, una por entrada, como `KEY=VALUE`. Pulse Intro después de cada una. El valor puede contener variables de script                                                                                                             | Texto                                                                   | Ninguna                           |
| Timeout (seconds)                            | Tiempo máximo de ejecución predeterminado. Quien ejecuta el script puede cambiarlo                                                                                                                                                                                | Número entero, 5 o más                                                  | 90                                |
| Run As User (Windows only)                   | Ejecuta el script en el contexto del usuario que ha iniciado sesión. Si se fija en el script, se aplica siempre y prevalece sobre la opción **Run As User** elegida al ejecutarlo. Si no hay ningún usuario con sesión iniciada, el script se ejecuta como SYSTEM | Activado o desactivado                                                  | Desactivado                       |
| Syntax                                       | Texto libre que describe los argumentos esperados. Se muestra a quien ejecuta el script                                                                                                                                                                           | Texto libre                                                             | Vacío                             |
| Editor                                       | El cuerpo del script. Puede contener marcadores de snippet como `{{Snippet Name}}`                                                                                                                                                                                | Código                                                                  | Vacío                             |
| Agent to run test script on                  | Dispositivo que usa **Test Script**                                                                                                                                                                                                                               | Un dispositivo al que tenga acceso                                      | Ninguno                           |

### Upload Script (Add Script)

| Campo                                        | Qué hace                                                  | Valores aceptados   | Predeterminado       |
| -------------------------------------------- | --------------------------------------------------------- | ------------------- | -------------------- |
| Name                                         | Como arriba                                               | Texto               | Vacío. Obligatorio   |
| Description                                  | Como arriba                                               | Texto libre         | Vacío                |
| Category                                     | Como arriba. Pulse Intro o Tab para añadir un valor nuevo | Texto               | Vacío                |
| Script Upload                                | El archivo cuyo contenido pasa a ser el cuerpo del script | Un archivo de texto | Ninguno. Obligatorio |
| Type                                         | Igual que **Shell Type**                                  | Como arriba         | **Powershell**       |
| Supported Platforms (All supported if blank) | Como arriba                                               | Como arriba         | En blanco            |
| Script Arguments                             | Como arriba                                               | Texto               | Ninguno              |
| Environment Variables                        | Como arriba                                               | `KEY=VALUE`         | Ninguna              |
| Default Timeout                              | Como arriba                                               | 5 o más             | 90                   |

### Snippet

| Campo       | Qué hace                                                                         | Valores aceptados              | Predeterminado     |
| ----------- | -------------------------------------------------------------------------------- | ------------------------------ | ------------------ |
| Name        | El nombre que se usa en el marcador `{{Name}}`. Único                            | Texto, hasta 40 caracteres     | Vacío. Obligatorio |
| Shell Type  | Lenguaje del snippet, como referencia y para el resaltado de sintaxis del editor | La misma lista que los scripts | **Powershell**     |
| Description | Se muestra en la lista de snippets                                               | Texto, hasta 50 caracteres     | Vacío              |
| Editor      | El código que se inserta en lugar del marcador                                   | Código                         | Vacío              |

## Páginas relacionadas

* [Ejecutar un comando o un script en un dispositivo](/es/sonar/administration/automation/run-commands-and-scripts.md)
* [Ejecutar acciones en muchos dispositivos](/es/sonar/administration/automation/bulk-actions.md)
* [Tareas automatizadas](/es/sonar/administration/automation/automated-tasks.md)
* [Variables de script](/es/sonar/reference/script-variables.md)
* [Roles y permisos](/es/sonar/administration/identities/roles.md)
