> 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/es/config/settings.md).

# Configuración de la aplicación

La configuración de la aplicación se encuentra en el fichero `appsettings.json`, dentro del directorio de instalación. Este fichero define varios ajustes que puede aplicar a PowerShell Universal. Aunque puede editar este fichero directamente, se recomienda utilizar uno de los siguientes métodos para conservar la configuración, ya que el fichero `appsettings.json` del directorio de instalación se sobrescribirá en las actualizaciones.

{% hint style="info" %}
Cuando se instala desde el MSI, el directorio de instalación de PowerShell Universal es `${env:ProgramFiles(x86)}\Universal`.
{% endhint %}

## AppSettings.json en ProgramData

Puede crear un fichero appsettings.json dentro de la carpeta `$Env:ProgramData\PowerShellUniversal`. Puede utilizar un subconjunto de los ajustes del fichero `appsettings.json`. Por ejemplo, si quisiera sobrescribir la configuración de JWT, podría tener un fichero `appsettings.json` como este.

```javascript
{
  "Jwt": {  
    "SigningKey": "PleaseUseYourOwnSigningKeyHere",  
    "Issuer": "IronmanSoftware",
    "Audience": "PowerShellUniversal"
  }
}
```

## Variables de entorno

También puede establecer variables de entorno para su configuración. Las variables de entorno deben llevar un guion bajo entre cada subconjunto del fichero `appsettings.json`. Por ejemplo, si quiere cambiar la clave de firma de JWT mediante una variable de entorno, establecería la variable `$Env:Jwt__SigningKey`. Si quisiera establecer la URL de la API externa, establecería `$Env:Api__Url`.

### Ejemplos

Uso de una variable de entorno para el secreto de OpenID Connect.

```
$Env:Authentication__OIDC__ClientSecret = "mySecret"
```

Uso de una variable de entorno para la clave de firma de JWT.

```
$Env:Jwt__SigningKey = "mySigningKey"
```

## Línea de comandos

Puede especificar la ubicación del fichero `appsettings.json` utilizando el argumento de línea de comandos `--appsettings` de `Universal.Server.exe` .

```powershell
.\Universal.Server.exe --appsettings C:\appsettings.json
```

## Descripciones de la configuración

### Kestrel / Endpoints

**Valor predeterminado**

```javascript
"Kestrel": {
  "Endpoints": {
    "HTTP": {
      "Url": "http://*:5000"
    }
  },
  "RedirectToHttps": "false"
},
```

La sección de endpoints de Kestrel le permite configurar el servidor web. Estos ajustes no se utilizan al alojar en IIS. En esta sección puede configurar opciones como HTTPS y el puerto en el que escuchará PowerShell Universal.

Kestrel es la implementación de servidor web para ASP.NET Core que utiliza PowerShell Universal. Para obtener más información sobre las opciones de configuración de Kestrel, visite esta [página de documentación de Microsoft](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#listenoptionsusehttps).

| Clave             | Descripción                                                                                                                               |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| RedirectToHttps   | Cuando es true, el servidor web redirigirá las solicitudes HTTP a HTTPS                                                                   |
| BasePath          | Necesario al configurar PowerShell Universal como sitio anidado dentro de IIS. Debe contener la ruta anidada de IIS. Por ejemplo, `/psu`  |
| Hsts \ MaxAgeDays | Establece la antigüedad máxima en días para [HTTP Strict Transport Security](https://https.cio.gov/hsts/).                                |
| CookiePolicy      | Cuando se establece en SameSiteNone, se aplicará el valor SameSite=None a las cookies en PSU. Esto resulta útil al alojar PSU en iframes. |
| Headers           | Un objeto en el que las claves son las cabeceras que se establecen en cada solicitud y el valor es el valor de la cabecera.               |

### Azure Application Insights

**Valor predeterminado**

```javascript
"ApplicationInsights": {
  "ConnectionString": ""
},
```

| Clave            | Descripción                                              |
| ---------------- | -------------------------------------------------------- |
| ConnectionString | Establece la cadena de conexión de Application Insights. |

### Registro

**Valor predeterminado**

```javascript
{
    "SystemLogPath": "%PROGRAMDATA%/PowerShellUniversal/Logs/System/log.txt",
    "SystemLogLevel": "Information"
}
```

Establece la ruta y el nivel del registro del sistema. Se sobrescribirá con el nivel de registro de settings.ps1 después de que este se cargue. Este ajuste resulta útil para depurar problemas durante el arranque del sistema.

| Clave          | Descripción                                                                                          |
| -------------- | ---------------------------------------------------------------------------------------------------- |
| SystemLogPath  | Ruta al fichero de registro.                                                                         |
| SystemLogLevel | El nivel de registro del sistema. Puede establecer valores como Debug, Information, Warning y Error. |

### AllowedHosts

**Valor predeterminado**

```javascript
    "AllowedHosts": "*",
```

Los hosts a los que se permite conectarse al servidor web. El valor predeterminado es cualquier host.

### **CorsHosts**

**Valor predeterminado**

```javascript
    "CorsHosts": "",
```

Configura los hosts a los que se permite realizar solicitudes de intercambio de recursos entre orígenes (CORS) al servidor. Para permitir varios hosts, separe cada host con un punto y coma.

```javascript
"CorsHosts" : "https://www.google.com;https://login.microsoftonline.com"
```

### **Datos**

**Valor predeterminado**

```javascript
"Data": {
  "RepositoryPath": "%ProgramData%\\UniversalAutomation\\Repository",
  "ConnectionString": "%ProgramData%\\UniversalAutomation\\database.db",
  "GitRemote": "",
  "GitUserName": "",
  "GitPassword": "", 
  "GitBranch": "",
  "ConfigurationScript": "",
  "ExternalGitClient": false,
  "Mode": "automatic",
  "SlowQueryLimit": 500,
  "Persistence": {}
},
```

| Clave                      | Descripción                                                                                                                                                                    |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| RepositoryPath             | Ruta a la ubicación de almacenamiento de los ficheros de configuración utilizados por Universal.                                                                               |
| ConnectionString           | Ruta a la base de datos utilizada por Universal.                                                                                                                               |
| GitRemote                  | Repositorio remoto de Git utilizado para sincronizar con Universal.                                                                                                            |
| GitBranch                  | Rama de Git de la que hacer checkout al sincronizar con Universal.                                                                                                             |
| GitUserName                | Nombre de usuario de Git utilizado para sincronizar con el GitRemote. Cuando se usa un PAT, puede ser cualquier valor.                                                         |
| GitPassword                | La contraseña de usuario de Git o el token de acceso personal utilizado para sincronizar con el GitRemote.                                                                     |
| GitSyncTimeout             | El número de segundos antes de que se agote el tiempo de espera de un comando de cliente git externo. El valor predeterminado es 60 segundos.                                  |
| ConfigurationScript        | Ubicación de un script de configuración personalizado que se debe cargar. Puede devolver objetos como scripts, dashboards y endpoints desde este script.                       |
| ExternalGitClient          | Cuando se establece en true, se utilizará el cliente Git del sistema operativo en lugar del cliente de biblioteca integrado                                                    |
| Mode                       | Establece el modo de git. Puede ser manual o automático. El valor predeterminado es manual.                                                                                    |
| SlowQueryLimit             | El número de milisegundos que debe ejecutarse una consulta SQL antes de que se escriba un mensaje de registro. El valor predeterminado es 200 ms. Solo disponible para MS SQL. |
| Persistence                | Configura la [persistencia de recursos en base de datos](/powershell-universal/es/config/repository.md).                                                                       |
| InvisibilityTimeoutMinutes | El número de minutos antes de que se agote el tiempo de espera de un trabajo en Hangfire. El valor predeterminado es 5. Solo se aplica a PostgreSQL.                           |

### **API**

**Valor predeterminado**

```javascript
"Api": {
  "Url": "",
  "HideManagementDoc": false
},
```

| Clave             | Descripción                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Url               | Establece la URL externa utilizada internamente por Universal. Esto es necesario al ejecutar Universal desde dentro de un proxy inverso como IIS. Al utilizar cmdlets como `Get-UAScript` desde un trabajo en ejecución, el servidor Universal necesita determinar dónde está el servidor web. Cuando se ejecuta dentro de un proxy, no puede determinarlo por sí mismo. Le convendrá configurar esto para que apunte al nombre y al puerto del sitio web de IIS en esta configuración. |
| HideManagementDoc | Si es true, oculta la documentación OpenAPI de la API de gestión de PowerShell Universal.                                                                                                                                                                                                                                                                                                                                                                                               |

{% hint style="warning" %}
\`Api.Url\` se utiliza internamente por PowerShell Universal cuando los cmdlets necesitan volver a llamar al servidor PSU desde trabajos, endpoints u otros contextos de ejecución internos. En entornos con proxy inverso o balanceo de carga, asegúrese de que este valor apunte a una URL estable y directamente accesible del host de PSU. Utilizar un alias de DNS u otro endpoint indirecto puede provocar fallos intermitentes en los cmdlets si ese alias se resuelve a través de un proxy o una ruta de backend inestables. Si es necesario, especifique \`-ComputerName\` de forma explícita en la llamada al cmdlet.
{% endhint %}

### **Autenticación**

**Valor predeterminado**

```javascript
"Authentication" : {
    "Windows": {
      "Enabled": "false"
    },
    "WSFed": {
      "Enabled": "false",
      "MetadataAddress": "",
      "Wtrealm": "",
      "CallbackPath": "/auth/signin-wsfed",
      "Wreply": "",
      "UseTokenLifetime": true,
      "CorrelationCookieSameSite": ""
    },
    "OIDC": {
      "Enabled": "false",
      "CallbackPath": "/auth/signin-oidc",
      "ClientID": "",
      "ClientSecret": "",
      "Resource": "",
      "Authority": "",
      "ResponseType": "",
      "SaveTokens": "false",
      "CorrelationCookieSameSite": "",
      "UseTokenLifetime": true
    },
    "OIDC": {
      "Enabled": "false",
      "CallbackPath": "/auth/signin-oidc",
      "ClientID": "",
      "ClientSecret": "",
      "Resource": "",
      "Authority": "",
      "ResponseType": "",
      "SaveTokens": "false",
      "CorrelationCookieSameSite": "",
      "UseTokenLifetime": true,
      "Scope": "openid profile groups",
      "GetUserInfo": false
    },
    "ClientCertificate": {
      "Enabled": "false"
    },
    "SessionTimeout": "25"
  },
```

**Windows**

| **Clave** | Descripción                                                                                                                                |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| Enabled   | Habilita o deshabilita la [autenticación de Windows](/powershell-universal/es/api/security.md#authenticating-with-windows-authentication). |

#### OIDC

Configuración de autenticación de OpenID Connect.

| Clave                     | Descripción                                                                                                                                                |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Enabled                   | Si OIDC está habilitado.                                                                                                                                   |
| CallbackPath              | La ruta a la que el proveedor de OIDC devolverá la llamada.                                                                                                |
| ClientID                  | El ID de cliente de OIDC configurado.                                                                                                                      |
| ClientSecret              | El secreto de cliente de OIDC configurado.                                                                                                                 |
| Resource                  | Recursos concedidos con este token de OIDC.                                                                                                                |
| Authority                 | La autoridad que se invoca al autenticar. Es la URL de su proveedor de OIDC.                                                                               |
| ResponseType              | El tipo de respuesta devuelta por el proveedor. El valor más habitual aquí es `code`                                                                       |
| SaveTokens                | Si se debe guardar el token para que esté disponible para endpoints como los dashboards.                                                                   |
| CorrelationCookieSameSite | [Configuración SameSite de la cookie de correlación.](https://docs.microsoft.com/en-us/aspnet/core/security/samesite?view=aspnetcore-5.0)                  |
| UseTokenLifetime          | Si se establece en true, la duración de la cookie se ajustará a la duración del token. Esto anula el valor de tiempo de espera de la sesión.               |
| GetUserInfo               | Devuelve información adicional del usuario para su uso en los ficheros roles.ps1. Puede acceder a la información adicional mediante la variable $UserInfo. |

#### WSFed

Configuración de autenticación WS-Federation.

| Clave                     | Descripción                                                                                                                                   |
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Enabled                   | Indica si WS-Fed está habilitado.                                                                                                             |
| MetadataAddress           | La dirección de metadatos para recuperar información sobre la instancia de WS-Fed.                                                            |
| Wrealm                    |                                                                                                                                               |
| Wreply                    |                                                                                                                                               |
| CallbackPath              | La ruta a la que el proveedor OIDC realizará la devolución de llamada.                                                                        |
| UseTokenLifetime          | Si se establece en true, la duración de la cookie se ajustará a la duración del token. Esto anula el valor de tiempo de espera de la sesión.  |
| CorrelationCookieSameSite | [Configuración de same site de la cookie de correlación.](https://docs.microsoft.com/en-us/aspnet/core/security/samesite?view=aspnetcore-5.0) |

#### Umbral de tiempo de espera de la sesión (minutos)

| Clave          | Descripción                                                                 |
| -------------- | --------------------------------------------------------------------------- |
| SessionTimeout | Número de minutos antes de que una sesión iniciada expire (por defecto, 25) |

### **JWT**

Configuración de JSON Web Token

**Valor predeterminado**

```javascript
"Jwt": {  
  "SigningKey": "PleaseUseYourOwnSigningKeyHere",  
  "Issuer": "IronmanSoftware",
  "Audience": "PowerShellUniversal"
},
```

| Clave      | Descripción                               |
| ---------- | ----------------------------------------- |
| SigningKey | La clave de firma para los tokens JWT.    |
| Issuer     | El emisor que se incluirá en el token.    |
| Audience   | La audiencia que se incluirá en el token. |

### Secrets

Opciones para configurar las bóvedas de secretos predeterminadas.

**Valor predeterminado**

```json
"Secrets": {
  "SecretStore": {
    "Password": "PSUSecretStore"
  },
  "Database": {
    "EncryptionKey": "=b0ywQA@VOSdr&R7an5g&XK6NVO%s4Tf",
    "Password": "",
    "KeySize": 128
  },
  "SecretManagement": {
    "OutOfProcess": false
  }
}
```

| Clave                           | Descripción                                                                                                            |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| SecretStore \ Password          | La contraseña para la bóveda PSUSecretStore. Utiliza el módulo Microsoft SecretStore.                                  |
| Database \ EncryptionKey        | La clave de cifrado AES 128 utilizada para cifrar los secretos almacenados en la base de datos.                        |
| Database \ Password             | Una contraseña utilizada para generar una clave de cifrado. EncryptionKey se ignorará si se especifica una contraseña. |
| Database \ KeySize              | El número de bytes de la clave. Debe ser un múltiplo de 128 y el valor predeterminado es 128.                          |
| SecretManagement \ OutOfProcess | Indica si las operaciones de gestión de secretos deben ejecutarse fuera del proceso. El valor predeterminado es false. |

#### Generar una clave de cifrado

Las claves de cifrado son de 128 bits y requieren la longitud adecuada. Se codifican como una cadena base64 y se convierten en bytes al iniciar.

Puede utilizar el siguiente código para generar una clave secreta con la longitud adecuada.

```powershell
$random = [System.Security.Cryptography.RandomNumberGenerator]::Create();
$buffer = New-Object byte[] 16;
$random.GetBytes($buffer);
[Convert]::ToBase64String($buffer)
```

### UniversalAutomation

Configuración de funciones específicas de automatización.

**Valor predeterminado**

```json
"UniversalAutomation": {
    "Queues": [],
    "JobHandshakeTimeout": 30,
    "JobDebugging": false,
    "ContinueJobOnServerStop": false,
    "HangfireWorkerCount" : 100
  }
```

| Clave                   | Descripción                                                                                                                                                                                                                                           |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Queues                  | Colas personalizadas de las que forma parte esta instancia de PSU.                                                                                                                                                                                    |
| JobHandshakeTimeout     | El número de segundos que se debe esperar antes de que un trabajo falle después de iniciar el proceso de PowerShell para ejecutarlo, si el proceso no se comunica de vuelta con el servidor.                                                          |
| JobDebugging            | Indica si se deben generar ficheros en el directorio temporal al iniciar un trabajo. Esto resulta útil para la depuración si los trabajos expiran antes de iniciarse.                                                                                 |
| ContinueJobOnServerStop | Indica si se debe continuar ejecutando un trabajo después de que el servicio se haya detenido. No se podrá informar del progreso del trabajo, pero el script seguirá ejecutándose.                                                                    |
| HangfireWorkerCount     | El número de subprocesos de trabajo de Hangfire que se iniciarán en el servidor. Esta configuración es específica del nodo. El valor predeterminado es 100. Es el número total de trabajos que pueden ejecutarse en el nodo concreto al mismo tiempo. |

### **HideAdminConsole**

```json
{
    "HideAdminConsole": false
}
```

Impide que el servicio sirva la consola de administración. Esto evitará que la consola de administración sea utilizada por cualquier usuario, incluidos los administradores.

### NodeName

```json
{
    "NodeName": ""
}
```

La opción de nombre de nodo se utiliza para cambiar el nombre de la instancia de PowerShell Universal. De forma predeterminada, es el nombre del ordenador local. Al utilizar PowerShell Universal en un contenedor, esto puede resultar problemático, porque el nombre puede cambiar cada vez que se reinicia el contenedor.

Para establecer un nombre de nodo estático, cambie este parámetro.

## Recursos estáticos

Puede definir recursos estáticos mediante la configuración de la aplicación. Esto incluye las variables de entorno y appsettings.json. Para definir un recurso, utilice el nodo `Resources` dentro de appsettings.json o el prefijo `Resources` con una variable de entorno.

Por ejemplo, para definir un rol estático en appsettings.json, utilice lo siguiente.

```json
{
    "Resources": {
        "Roles": [
            {
                "Name": "Static Role",
                "ClaimType": "group",
                "ClaimValue": "xyz123"
            }
        }
    }
}
```

Puede definir el mismo rol mediante variables de entorno.

```powershell
$ENV:Resources__Roles__0__Name = "Static Role"
$ENV:Resources__Roles__0__ClaimType = "group"
$ENV:Resources__Roles__0__ClaimValue = "xyz123"
```

### Ejemplo: Docker Compose

Puede utilizar variables de entorno en un fichero YML de Docker Compose para definir recursos que estarán disponibles en PowerShell Universal después de su inicio. El ejemplo siguiente crea etiquetas, un rol, establece un título de administración personalizado, añade una licencia y establece el entorno predeterminado.

```yaml
services:    
    psu:         
      image: ironmansoftware/universal:latest
      environment:
          - Resources__Tags__0__Name=Production  
          - Resources__Tags__1__Name=Development
          - Resources__Roles__0__Name=PSUAdmin
          - Resources__Roles__0__ClaimType=groups
          - Resources__Roles__0__ClaimValue=1234567890abcdef1234567890abcdef
          - Resources__Roles__0__Permissions_0=*
          - Resources__Settings__DefaultEnvironment=PowerShell 7
          - Resources__Branding__AdminConsoleTitle=PSU Admin Console
          - Authentication__OIDC__Enabled=true
          - Authentication__OIDC__ClientId=123-123-123-123-123
          - Authentication__OIDC__ClientSecret=secret
          - Authentication__OIDC__Authority=https://login.microsoftonline.com/123-123-123-123
          - PSULICENSE=<License></License>
      ports:
        - "5000:5000"
```

## Configuración del entorno de ejecución de .NET

El entorno de ejecución de .NET también admite ajustes que se aplican a PowerShell Universal. Puede que desee ajustar esta configuración según sus necesidades.

Puede encontrar todo sobre la [configuración del entorno de ejecución de .NET en Microsoft Docs](https://learn.microsoft.com/en-us/dotnet/core/runtime-config/).

### Ficheros temporales excesivos

En entornos Linux, puede que tenga muchos ficheros temporales creados por el entorno de ejecución para habilitar funciones de depuración. [Deshabilitar la configuración de diagnóstico](https://learn.microsoft.com/en-us/dotnet/core/runtime-config/debugging-profiling#enable-diagnostics) del entorno de ejecución evitará que esto ocurra. No podrá utilizar las herramientas de depuración de .NET con esta opción deshabilitada.

```powershell
$Env:DOTNET_EnableDiagnostics = $false
```


---

# 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/es/config/settings.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.
