> 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 personalizados

Utilice los ámbitos de caché, página, sesión y UI en las aplicaciones de PowerShell Universal para compartir estado o interactuar con elementos del navegador conectado.

Universal Apps expone proveedores de PowerShell personalizados para el estado cuyo ámbito es una aplicación, una sesión del navegador, una página o un elemento de UI conectado. Utilice el ámbito que se corresponda con la duración y la visibilidad que requiera su aplicación.

## Ámbito de UI

El ámbito `$UI:` proporciona acceso directo a un elemento del navegador conectado mediante su ID. Lea o establezca sus propiedades de estado utilizando la sintaxis de propiedades de PowerShell en lugar de `Get-UDElement` o `Set-UDElement`.

Utilice `$UI:` únicamente en un punto de conexión de aplicación o en un controlador interactivo con una conexión de navegador activa. No puede acceder a elementos desde API REST, puntos de conexión programados ni trabajo en segundo plano sin un cliente de aplicación conectado.

```powershell
New-UDTextbox -Id 'Name'

New-UDButton -Text 'Show name' -OnClick {
    Show-UDToast -Message $UI:Name.value
}
```

Establezca una o varias propiedades en un elemento asignando una propiedad directamente.

```powershell
$UI:Status.Text = 'Saved'
$UI:Status.Visible = $true
$UI:Status.Color = 'green'
```

El ID del elemento va después de `$UI:` y el nombre de la propiedad se corresponde con la propiedad de estado del componente. Por ejemplo, los cuadros de texto exponen `value`, mientras que un componente de tipografía expone `Text`. Utilice las propiedades de estado admitidas por el componente con el que esté trabajando.

La siguiente asignación directa es equivalente a llamar a `Set-UDElement` con una tabla hash de propiedades:

```powershell
$UI:Status.Text = 'Saved'

# Equivalent to:
Set-UDElement -Id 'Status' -Properties @{ Text = 'Saved' }
```

## Ámbito de caché

El ámbito de caché almacena una variable que está disponible para todos los puntos de conexión de la aplicación. Utilícelo para datos que compartan varios controles o que sean costosos de recuperar, como datos de Active Directory o contadores de rendimiento.

Igual que con otros ámbitos de PowerShell, defina una variable de caché con un prefijo y un separador de dos puntos.

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

Una vez asignada, la variable `$Cache:Computers` está disponible en cualquier punto de conexión de la aplicación.

```powershell
New-UDGauge -Value $Cache:Computers.Length -ValueMinimum 0 -ValueMaximum 100
```

## Ámbito de página

El ámbito de página almacena variables para una pestaña o ventana del navegador. El estado se elimina cuando se cierra esa pestaña o ventana; abrir la aplicación en otra pestaña inicia un ámbito de página independiente.

```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 almacena variables para la sesión de aplicación de un usuario. Una sesión comienza cuando el usuario visita la aplicación por primera vez y se identifica mediante una cookie del navegador. Las sesiones tienen un tiempo de espera por inactividad de 25 minutos.

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

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

```powershell
New-UDGrid -Content {
    if ($Session:ShowChart) {
        $Data = @(
            [PSCustomObject]@{ Name = 'Available'; Value = 75 }
            [PSCustomObject]@{ Name = 'Used'; Value = 25 }
        )

        New-UDChartJS -Type 'doughnut' -Data $Data -DataProperty Value -LabelProperty Name
    }
}
```

Las variables de sesión se borran cuando finaliza la sesión.

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

El ámbito de sesión resulta útil para credenciales que solo deben existir durante la duración de una sesión de usuario activa. Esto permite que una aplicación solicite credenciales administrativas sin conservarlas ni compartirlas.

```powershell
if (-not $Session:AdminCredentials) {
    $Session:AdminCredentials = Get-Credential -Message 'Enter administrator credentials'
}

New-UDButton -Text 'Check ACL' -OnClick {
    try {
        $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'
```

Las credenciales de `$Session:AdminCredentials` no se conservan en disco ni se comparten con otros usuarios, y se borran cuando finaliza la sesión.

## Véase también

* [Devolutions Academy - Estado del usuario/actualizar detalles del usuario](https://academy.devolutions.net/student/activity/3546046-part-5-user-status-refresh-user-details)


---

# 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.
