> 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/getting-started/upgrading.md).

# Actualizar

## Descripción general

Este documento cubrirá el proceso de actualización de las instancias de PowerShell Universal en producción. Trataremos los siguientes temas.

1. Copia de seguridad de datos
2. Proceso de actualización
3. Validación de la actualización

Los binarios de la aplicación Universal generalmente se pueden actualizar sin tener que cambiar la configuración o la base de datos manualmente, pero recomendamos hacer copias de seguridad de los datos de producción.

## Recomendaciones

Para entornos de producción, recomendamos implementar PowerShell Universal en un entorno de ensayo o de desarrollo antes de las actualizaciones importantes. Esto permite realizar pruebas antes de que los usuarios finales se vean afectados. Puede utilizar [licencias de desarrollo ](/powershell-universal/es/licensing.md#developer-license)para probar cambios en instancias de PowerShell Universal sin adquirir otra licencia.

## 1. Copia de seguridad de datos

PowerShell Universal utiliza un sistema de configuración basado en scripts junto con una base de datos empleada para la retención de entidades como tokens de aplicación, historial de trabajos e identidades. Si es posible, conviene hacer una copia de seguridad de estos elementos antes de ejecutar una actualización, para facilitar la reversión en caso de que se produzca un problema durante la validación.

### Base de datos

Hacer una copia de seguridad de la base de datos garantiza que se conserven todos los tokens de aplicación, el historial de trabajos, las identidades y los secretos de la base de datos en caso de que falle la actualización. Las bases de datos SQL también pueden ajustar el esquema de la base de datos y pueden requerir una reversión no solo de los datos, sino también del esquema de las tablas de la base de datos.

#### SQLite

De forma predeterminada, PowerShell Universal utiliza una base de datos de fichero único llamada SQLite. A menos que se configure de otro modo, la base de datos se almacena en `%ProgramData%\UniversalAutomation`. Debería tener un `database.db` y posiblemente un `database-log.db`. Se debe hacer una copia de seguridad de ambos ficheros. El servicio debe detenerse para poder hacer la copia de seguridad de los ficheros.

#### SQL

Cuando se utiliza SQL para la persistencia, haga una copia de seguridad de toda la base de datos (incluido el esquema). No es necesariamente necesario detener el servicio de PowerShell Universal al hacer la copia de seguridad de la base de datos, pero puede seguir escribiendo en la base de datos (por ejemplo, al ejecutar trabajos programados) una vez completada la copia de seguridad.

### Scripts de configuración

Los scripts constituyen los principales datos de configuración de los que hay que hacer copia de seguridad al actualizar una instancia de PowerShell Universal en producción. Para producción, recomendamos utilizar un sistema de control de versiones. También puede aprovechar la integración con git incorporada. Si utiliza una sincronización bidireccional para la integración con git de PowerShell Universal, considere etiquetar su rama de git antes de la actualización para permitir una reversión sencilla ante cambios inesperados dentro del repositorio de git.

## 2. Progreso de la actualización

A continuación se incluyen secciones para cada tipo de actualización del sistema y los pasos que debe seguir según cómo instaló originalmente PSU.

### MSI

Al instalar mediante el MSI, deberá seguir los mismos procedimientos de copia de seguridad indicados anteriormente.

#### appsettings.json

Conviene hacer una copia de seguridad del fichero `appsettings.json` almacenado en `%ProgramData%\PowerShellUniversal`. Este fichero contiene información como el puerto, la ubicación de almacenamiento de datos y otros ajustes del servidor. Normalmente, el MSI no realizará cambios en este fichero una vez creado. Utilizará los ajustes encontrados para la versión actualizada. Dicho esto, si es necesario, el MSI realizará cambios en el fichero appsettings. Estos cambios se consideran importantes y se enumerarán en el registro de cambios de la versión.

#### Cuenta de servicio

Al ejecutar una actualización de MSI, el servicio PSU no se desinstala y, por lo tanto, la cuenta de servicio seguirá estando establecida cuando el servicio se inicie.

{% hint style="info" %}
Si realiza una desinstalación y después una instalación con el MSI, la cuenta de servicio se eliminará.
{% endhint %}

#### Proceso de actualización

Una vez que se haya hecho copia de seguridad de todos los ficheros de configuración y de la base de datos, puede ejecutar el nuevo instalador MSI.

El instalador puede solicitar reiniciar la máquina si hay ficheros bloqueados. El MSI de PSU desinstalará todos los ficheros del directorio de instalación e instalará ficheros completamente nuevos.

Una vez que el MSI haya finalizado, puede navegar a la consola de administración de PowerShell Universal para realizar la validación de la instalación.

### IIS

A continuación encontrará información sobre la actualización de una instalación en IIS.

#### web.config

Además de los ficheros indicados anteriormente para la copia de seguridad, también debería considerar hacer una copia de seguridad de su fichero `web.config`. Si no ha realizado cambios en este fichero, no necesita hacer copia de seguridad de él.

El fichero `web.config` que se incluye en el directorio de instalación de la aplicación se sobrescribirá durante las actualizaciones. Si ha movido su fichero web.config a una ubicación alternativa, no se sobrescribirá. Al crear un sitio web de IIS, puede simplemente incluir el fichero `web.config` en el directorio de la aplicación web y tener los [binarios almacenados en una ubicación diferente](/powershell-universal/es/config/hosting/hosting-iis.md).

#### Proceso de actualización

Al actualizar con IIS, primero deberá detener su grupo de aplicaciones para asegurarse de que los binarios utilizados por IIS ya no estén en uso y, a continuación, reemplazar los binarios por los nuevos. Para garantizar que la actualización funcione como se espera, se recomienda eliminar todos los ficheros de la aplicación y luego descomprimir los nuevos en el mismo directorio para evitar conflictos de ensamblados.

{% hint style="info" %}
Como con cualquier instalación desde un fichero ZIP, asegúrese de ejecutar `Get-ChildItem -Recurse | Unblock-File` desde un símbolo del sistema con privilegios elevados sobre los ficheros de PowerShell Universal para garantizar que puedan ejecutarse correctamente.
{% endhint %}

Una vez que haya copiado los nuevos ficheros y los haya desbloqueado, inicie el grupo de aplicaciones, navegue a la consola de administración de PowerShell Universal y realice la validación de la instalación.

### Módulo Universal

El módulo Universal se puede utilizar para actualizar instalaciones de PowerShell Universal instaladas previamente mediante el módulo.

{% hint style="warning" %}
No utilice el módulo Universal para actualizar instancias instaladas mediante MSI.
{% endhint %}

Siga los procedimientos de copia de seguridad indicados anteriormente y después realice la actualización.

Primero, actualice el módulo local de PowerShell Universal y verifique que se ha instalado la versión esperada.

```powershell
Update-Module Devolutions.PowerShellUniversal
Import-Module Devolutions.PowerShellUniversal -PassThru
```

A continuación, ejecute `Update-PSUServer` para descargar y descomprimir la nueva instancia de PSU.

```powershell
Update-PSUServer
```

Una vez completada la actualización, navegue a la consola de administración de PowerShell Universal y comience la validación de la actualización.

### ZIP

Realice los procedimientos de copia de seguridad necesarios y descargue el último ZIP de PowerShell Universal.

Detenga el servicio de PowerShell Universal. Elimine los ficheros existentes de la aplicación PowerShell Universal. Extraiga los ficheros ZIP en el mismo directorio. Por último, ejecute `Unblock-File` sobre el directorio para garantizar que PSU pueda ejecutarse correctamente. Ejecute siempre este comando como administrador.

```powershell
Get-ChildItem -Recurse | Unblock-File
```

Una vez completada la actualización, navegue a la consola de administración de PowerShell Universal y comience la validación de la actualización.

### Base de datos

De forma predeterminada, el servicio PSU migrará a la última versión de la base de datos durante el proceso de inicio.

La base de datos también se puede actualizar antes de actualizar la aplicación. Esto se recomienda para instalaciones más grandes que pueden requerir cierto tiempo para que se realice la actualización del esquema. En algunos entornos, permitir que el servicio actualice la base de datos puede provocar un tiempo de espera agotado, como con el Administrador de control de servicios en Windows.

Si utiliza SQL, encontrará ficheros SQL generados y ubicados en la carpeta SQL dentro del medio de instalación de PSU. Ejecute estos scripts en su base de datos antes de actualizar.

Todos los tipos de bases de datos admiten la herramienta de línea de comandos `psu` para las actualizaciones.

```powershell
psu db schema latest --connection-string "Data Source=C:\ProgramData\UniversalAutomation\database.db"
```

## 3. Validación de la actualización

Después de ejecutar una actualización, debe realizar una validación básica en su servidor PSU para asegurarse de que sea totalmente funcional.

### Notificaciones

Verifique que no haya errores en el desplegable de notificaciones. Pueden ser señal de problemas durante la actualización.

### Módulos

Las actualizaciones de PowerShell Universal pueden cambiar las versiones de ensamblado de las DLL que se distribuyen con la plataforma. Esto puede provocar que otros módulos no se carguen. Aunque puede que esto no sea evidente al principio, considere hacer un inventario de los módulos utilizados en su plataforma para asegurarse de que las versiones sean coherentes antes y después de la actualización, con el fin de limitar los cambios.

Si ha instalado una versión del módulo `Universal` fuera de PowerShell Universal (por ejemplo, con `Install-Module`), debe asegurarse de actualizar el módulo o podría entrar en conflicto con el nuevo instalado con PowerShell Universal.

### Aplicaciones

Los problemas de actualización más comunes se deben a cambios en el marco de trabajo de Universal App. Las aplicaciones pueden ser complejas y las correcciones de errores o las funciones a veces pueden causar problemas en la aplicación de un usuario mientras se corrigen problemas relacionados con la aplicación de otro usuario. Lea el registro de cambios antes de actualizar para comprender el impacto de los cambios realizados en el marco de trabajo de aplicaciones y considere probar la aplicación con datos de desarrollo antes de actualizar en producción.

## Problemas comunes de actualización

### El grupo de aplicaciones de IIS no se inicia después de la actualización

El problema de actualización más común es que `Unblock-File` no se llama correctamente en los ficheros extraídos al realizar una actualización de una instalación ZIP en IIS. Asegúrese también de ejecutar el comando `Unblock-File` de forma recursiva y desde una sesión administrativa.

Otro problema habitual es extraer los ficheros sobre los ficheros existentes. Esto puede causar conflictos de ensamblados y deja la aplicación en un estado desconocido. Siga la documentación de actualización de IIS y elimine los ficheros antes de extraerlos.

### Errores de comando no encontrado

Cuando se añade nueva funcionalidad a PowerShell Universal, normalmente se hace mediante nuevos cmdlets. Si hay versiones anteriores del módulo de PowerShell Universal instaladas en el sistema, pueden producirse conflictos con el que se distribuye en el medio de instalación. Asegúrese de haber eliminado las versiones anteriores del módulo `Universal` si encuentra estos errores.

### Error de tabla\columna no encontrada al usar la persistencia SQL

Esto puede ocurrir si las actualizaciones del esquema SQL no se ejecutan durante las actualizaciones. Si establece el ajuste `RunMigrations` en `false` en `appsettings.json`, debe ejecutar las migraciones manualmente o el servicio de PowerShell Universal no funcionará correctamente.

### Cambio importante en un componente de la aplicación

Estos cambios pueden ser visuales o funcionales. Asegúrese de revisar el registro de cambios para localizar elementos que puedan estar relacionados con el cambio que está observando. Considere publicar en los foros o abrir una incidencia en GitHub para comprobar si el problema es intencionado y si existe una solución alternativa viable.

{% hint style="info" %}
Hacemos el máximo esfuerzo posible para dar soporte a las aplicaciones de todos sin cambios importantes. Dicho esto, cada configuración es bastante única, por lo que estaremos encantados de atender los problemas que pueda encontrar. Simplemente, háganoslo saber.
{% endhint %}

### Problemas de licencia después de la actualización

El modelo de licencias de PowerShell Universal ofrece a los usuarios con licencia la posibilidad de actualizar a la versión más reciente siempre que tengan una licencia perpetua o de suscripción activa. Si intenta actualizar un servidor que ya no se encuentra dentro del periodo de licencia, el servidor no funcionará como se espera. Deberá volver a la versión anterior para restaurar la funcionalidad.

Además, puede encontrar problemas debidos al reinicio del servicio PSU. Cuando el servicio se inicia, verifica el estado de la suscripción de la licencia. Si no lo consigue, puede que no tenga la licencia correcta y provoque otros problemas. La causa raíz suele ser problemas de red al intentar acceder a los sitios web IronmanSoftware.com o Devolutions.net para la activación. Las claves de licencia sin conexión sí utilizan internet y no encontrarán este problema.

Si experimenta un problema con una licencia que no puede resolver, no dude en ponerse en contacto con el [soporte de Devolutions](mailto:service@devolutions.net).

### Versiones mezcladas

Mezclar versiones de servidores de PowerShell Universal con la misma base de datos puede causar problemas, ya que los cambios de esquema entre la base de datos o los cambios de protocolo en las API internas pueden no coincidir. Recomendamos planificar sus actualizaciones de forma que finalmente todos los servidores de PowerShell Universal ejecuten la misma versión.

{% hint style="warning" %}
Existe un problema de compatibilidad conocido entre PSU 5.5.4 y anteriores y PSU 5.6.0 y posteriores. No recomendamos mezclar estas versiones. La programación de trabajos puede fallar en los servidores 5.5.4 existentes cuando se combinan con servidores 5.6.0.
{% endhint %}

## Cambios importantes de la versión 5.0

### Eliminación de las páginas

El diseñador de páginas de arrastrar y soltar se ha eliminado en favor de las [páginas del portal](/powershell-universal/es/portal/portal-pages.md) y los [widgets](/powershell-universal/es/portal/portal-widgets.md).

### Eliminación del diseñador de páginas de aplicaciones

Se ha eliminado el diseñador de páginas de arrastrar y soltar para aplicaciones. Las aplicaciones creadas con el diseñador seguirán funcionando.

### Eliminación de los controles de acceso

Los controles de acceso se han eliminado en favor de los [permisos](/powershell-universal/es/seguridad/enterprise-security/permissions.md). También puede utilizar el [portal ](https://github.com/Devolutions/docs/tree/master/translations/es/powershell-universal/getting-started/broken-reference/README.md)para asignar recursos, como scripts, a los usuarios sin necesidad de permisos complicados.

### Cambios en el canal de comunicación y la autorización de los cmdlets

Antes de la versión 5, los cmdlets enviaban datos por HTTP o mediante un canal gRPC interno. Ahora, todos los cmdlets utilizan un canal gRPC de cara al exterior protegido por autenticación y autorización. Ya no utiliza llamadas HTTP estándar de la API REST.

Esto puede suponer un problema para las instancias de PowerShell Universal situadas detrás de [proxies inversos](/powershell-universal/es/config/hosting/reverse-proxy.md) y requiere que se envíen los valores de encabezado adecuados.

Consulte la documentación del [módulo ](/powershell-universal/es/config/module.md)para obtener más información.

#### Errores comunes de cmdlets que puede encontrar durante la actualización

#### Código de estado HTTP 403

El cmdlet que está llamando no tiene acceso a las API de PowerShell Universal. Deberá especificar un parámetro -AppToken en los cmdlets para poder utilizarlos.

También puede habilitar el [modelo de seguridad de API permisivo](/powershell-universal/es/config/module.md#authorization-security-model) para permitir cmdlets llamados internamente desde PowerShell Universal sin necesidad de autorización.

#### URI no definido

Los cmdlets no pueden determinar cómo llamar a las API de PowerShell Universal. Deberá especificar un parámetro -ComputerName o configurar la URL de la API en appsettings.json.

```json
{
   "API" : {
      "URL": "http://localhost:5000"
   }
}
```

#### Error de certificado SSL

Si utiliza un certificado autofirmado, deberá especificar el parámetro `-TrustCertificate` de los cmdlets.

### El entorno de PowerShell 7 ya no utiliza Pwsh.exe

El entorno predeterminado de PowerShell 7 utiliza una versión .NET del ejecutable Universal.Agent.exe que ejecuta PowerShell 7.5. Esto permite la máxima compatibilidad con las bibliotecas de PowerShell Universal y otros módulos.

Todavía es posible utilizar el proceso pwsh.exe en configuraciones de entorno personalizadas.

### Paquete de hospedaje de IIS

Si realiza el hospedaje en IIS, asegúrese de instalar el [paquete de hospedaje de .NET 9.0](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-aspnetcore-9.0.4-windows-hosting-bundle-installer).

### Versión de PowerShell del entorno integrado

El entorno integrado ahora utiliza PowerShell 7.5.

### SQLite por defecto

SQLite es el método de persistencia predeterminado. Deberá realizar una conversión manual desde LiteDB antes de instalar la versión 5.

### Se ha eliminado la compatibilidad con LiteDB

LiteDB se ha eliminado como motor de base de datos compatible. Junto con los ficheros de instalación de PowerShell Universal, encontrará `psu.exe`. Se puede utilizar para convertir una base de datos LiteDB en una base de datos SQLite. Utilice la siguiente línea de comandos.

```powershell
.\psu.exe db convert --Path "$ENV:ProgramData\UniversalAutomation\database.db"
```

La herramienta creará un fichero `database.bak` antes de realizar la conversión. El progreso se mostrará en la consola.

Después de convertir la base de datos, deberá actualizar el fichero `appsettings.json` para utilizar el nuevo complemento de SQLite y actualizar la cadena de conexión a un formato SQLite. A continuación se muestra un fragmento que puede aplicar a su fichero de configuración.

```json
{
    "Plugins": [
        "SQLite"
    ],
    "Data": {
        "ConnectionString": "Data Source=C:\ProgramData\UniversalAutomation\database.db"
    }
}
```

#### Convertir una base de datos para una actualización mediante MSI

Para que el instalador de PowerShell Universal se ejecute correctamente, deberá actualizar la base de datos antes de ejecutar el instalador MSI. A continuación se indican los pasos que debe seguir.

1. Descargue el paquete ZIP para Windows y extráigalo en un directorio local.
2. Detenga el servicio de PowerShell Universal
3. Ejecute el comando psudb.exe desde el directorio del ZIP, como se ha indicado anteriormente, para convertir el fichero de base de datos en %ProgramData%\UniversalAutomation
4. Actualice el fichero %ProgramData%\PowerShellUniversal\appsettings.json para utilizar el complemento de SQLite en lugar del complemento de LiteDB
5. Ejecute el instalador de PowerShell Universal v5 para actualizar los ficheros de la aplicación.

### Se ha eliminado el modo de escritorio

El modo de escritorio se ha eliminado. Los recursos como las teclas de acceso rápido, las asociaciones de ficheros y los accesos directos ya no son compatibles. El MSI ahora admite instalaciones con ámbito de usuario que se ejecutarán como el usuario actual y se iniciarán al iniciar sesión.

### Install-PSUServer en Windows se instala desde el MSI

En versiones anteriores de PowerShell Universal, este comando instalaba en un directorio y creaba el servicio manualmente. Este comando ahora instala desde el MSI. Si instaló anteriormente con este módulo, deberá eliminar la instalación existente con una versión anterior del módulo y, a continuación, instalar con la nueva versión del módulo.

```powershell
Install-Module Universal -RequiredVersion 4.4.0
Remove-PSUServer
```

Abra un nuevo símbolo del sistema y ejecute lo siguiente.

```powershell
Uninstall-Module Devolutions.PowerShellUniversal
Install-Module Devolutions.PowerShellUniversal
Install-PSUServer
```

### Se ha eliminado el almacenamiento de la base de datos de Git

PowerShell Universal ya no admite almacenar el repositorio de git directamente en la base de datos. Recomendamos utilizar un proveedor de git remoto como GitHub, GitLab o Gitea. PowerShell Universal v5 sí admite repositorios de git locales sin necesidad de sincronizar con un remoto. Esto permite almacenar el historial de ficheros directamente en el servidor de PowerShell Universal.

### Se han eliminado Heatmap y Marker Cluster de New-UDMap

Los mapas ya no admiten mapas de calor ni clústeres de marcadores.


---

# 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/getting-started/upgrading.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.
