> 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/aplicaciones/custom-variable-scopes.md).

# Ámbitos de variables personalizados

## Ámbitos de variables personalizados

Las Universal Apps exponen tres ámbitos de variables personalizados mediante proveedores personalizados. Estos proveedores le permiten almacenar sus variables en ámbitos que tienen sentido para una aplicación web. El ámbito de caché se utiliza para almacenar variables que se pueden usar en cualquier endpoint dentro de una aplicación. El ámbito de sesión se utiliza para almacenar variables que se pueden usar en la sesión de un único usuario de la aplicación.

### Ámbito de caché

El ámbito de caché se utiliza para almacenar una variable que estará disponible en cualquier endpoint. El ámbito de caché es útil para almacenar datos que pueden mostrarse en más de un control o cuya consulta puede llevar mucho tiempo. Esto puede resultar útil para consultar contadores de rendimiento de máquinas (p. ej., Active Directory, Azure).

Como en cualquier otro ámbito, las variables de caché se definen con un prefijo y un separador de dos puntos.

```powershell
$Cache:Computers = Get-ADComputer
```

Una vez asignada, la variable `$Cache:Computer` está disponible en cualquier endpoint.

```powershell
New-UDMonitor -Title Computers -Endpoint {
    $Cache:Computers.Length | Out-UDMonitorData
}
```

### Ámbito de página

El ámbito de página almacena variables por pestaña o ventana del navegador. Si se abre una nueva pestaña o se cierra la actual, el estado se eliminará.

```powershell
New-UDForm -Content {
    New-UDTextbox -Id 'Name'
} -OnSubmit {
    $Page:Name = $EventData.Name
    Sync-UDElement -Id 'Name'
}

New-UDDynamic -Content {
    New-UDTypography $Page:Name
}
```

### Ámbito de sesión

El ámbito de sesión se utiliza para almacenar una variable por sesión. Una sesión se establece cuando el navegador de un usuario visita un dashboard por primera vez. En el navegador del usuario se almacena una cookie que indica que forma parte de la sesión. Las sesiones tienen un tiempo de inactividad de 25 minutos.

Como en cualquier otro ámbito, las variables de caché se definen con un prefijo y un separador de dos puntos.

```powershell
New-UDCheckbox -Label "Show chart" -OnChange {
   $Session:ShowChart = $EventData
}
```

Una vez asignada, la variable `$Session:ShowChart` está disponible en los controladores de eventos de la aplicación. Las variables de sesión no están disponibles en los endpoints de la API REST ni en los endpoints programados.

```powershell
New-UDColumn -Endpoint {
    if ($Session:ShowChart) {
         New-UDChart ...
    }
}
```

Una vez que se finaliza una sesión, las variables de sesión se borran.

#### Almacenar credenciales en el ámbito de sesión

El ámbito de sesión resulta especialmente útil para almacenar credenciales de usuario que no deben persistir más allá de la sesión del usuario. Este patrón permite que las aplicaciones soliciten credenciales administrativas sin almacenarlas de forma permanente, cumpliendo los requisitos de seguridad en los que las credenciales no deben guardarse.

> ℹ️ **Información**
>
> Las variables de sesión caducan cuando finaliza la sesión del usuario. Esto las hace ideales para almacenar datos sensibles como credenciales que solo deben existir durante el uso activo.

**Ejemplo: solicitar credenciales de administrador**

Este ejemplo muestra cómo solicitar credenciales a los usuarios una vez por sesión y reutilizarlas para operaciones privilegiadas:

```powershell
# Check if credentials are already stored in the session
if (-not $Session:AdminCredentials) {
    # Prompt user for credentials (only happens once per session)
    $Session:AdminCredentials = Get-Credential -Message "Enter administrator credentials"
}

# Use the stored credentials for privileged operations
New-UDButton -Text 'Check ACL' -OnClick {
    try {
        # Execute command as the credentialed user
        $result = Invoke-Command -Credential $Session:AdminCredentials -ScriptBlock {
            Get-Acl C:\SensitiveFolder
        }
        
        Show-UDToast -Message "ACL retrieved successfully" -BackgroundColor Green
        Set-UDElement -Id 'aclOutput' -Content { 
            $result | Out-String 
        }
    }
    catch {
        Show-UDToast -Message "Failed: $($_.Exception.Message)" -BackgroundColor Red
    }
}

New-UDElement -Tag 'pre' -Id 'aclOutput'
```

**Puntos clave:**

* `$Session:AdminCredentials` almacena las credenciales únicamente durante la sesión del usuario
* `Get-Credential` solicita las credenciales al usuario una vez; las operaciones posteriores reutilizan la credencial almacenada
* `Invoke-Command -Credential` ejecuta los comandos como el usuario de la credencial
* Las credenciales nunca se conservan en disco ni se comparten entre usuarios
* Cuando finaliza la sesión del usuario, las credenciales se borran automáticamente

Este enfoque es ideal para aplicaciones que realizan gestión de ACL, operaciones del sistema de ficheros u otras tareas que requieren privilegios elevados sin almacenar de forma permanente las credenciales de administrador.


---

# 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/aplicaciones/custom-variable-scopes.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.
