Error RD Web Client “RD Web Access does not appear to be installed on the system” en Windows Server 2019: causa y solución

Si al publicar el Remote Desktop Web Client (HTML5) en Windows Server 2019 recibes “RD Web Access does not appear to be installed on the system.”, aquí tienes la causa más probable, cómo confirmarla y un procedimiento paso a paso para resolverlo sin rehacer toda tu implementación RDS.

Índice

Resumen del problema

En un servidor Windows Server 2019, al ejecutar en Windows PowerShell 5.1 y con permisos elevados:

Publish-RDWebClientPackage -Type Production -Latest

el cmdlet primero informa que el cliente ya está instalado y, a continuación, lanza el error:

“RD Web Access does not appear to be installed on the system.”

El rol Remote Desktop Web Access figura como instalado y el módulo RDWebClientManagement se ha reinstalado, pero el fallo persiste.

Diagnóstico: ¿qué provoca realmente este mensaje?

La explicación más frecuente es sencilla, pero no obvia: el módulo RDWebClientManagement comprueba si existe en IIS la aplicación RDWeb con su estructura esperada (RDWebPages) bajo el Default Web Site y, a partir de ahí, publica en RDWeb/webclient (o RDWeb/webclient-test). Si dicha aplicación no existe, está ubicada en otra ruta/sitio, fue renombrada o los cmdlets se están ejecutando en un servidor distinto al que hospeda RD Web Access, el módulo “concluye” que RD Web Access no está instalado y arroja ese error.

Cómo hace la validación el módulo

Internamente, el módulo llama a comandos de WebAdministration para localizar la app RDWeb y sus rutas bajo IIS. Si no encuentra esa estructura, aborta con el mensaje de error. De ahí que pequeñas variaciones como haber eliminado o renombrado Default Web Site, mover RDWeb a otro sitio/puerto o ejecutar el cmdlet en el servidor equivocado conduzcan exactamente al mismo síntoma.

Solución práctica, paso a paso

Ejecuta los cmdlets en el servidor correcto y con sesión elevada

Los cmdlets Install-RDWebClientPackage, Import-RDWebClientBrokerCert y Publish-RDWebClientPackage deben ejecutarse en el servidor que hospeda el rol RD Web Access y en una consola elevada de Windows PowerShell 5.1. Si tu implementación es de múltiples servidores (Broker, Web Access y Session Hosts separados), asegúrate de conectarte a la VM/servidor que ejecuta RD Web Access.

# Comprueba versión de PowerShell y elevación
$PSVersionTable.PSVersion
whoami /groups | Select-String "S-1-5-32-544" | ForEach-Object { "Sesión elevada: $true" }

Comprueba el rol RD Web Access

Get-WindowsFeature RDS-Web-Access | Format-Table -Auto 

Verifica la estructura de IIS esperada

Abre IIS Manager y confirma que exista Sites → Default Web Site → RDWeb → Pages. En muchas instalaciones la ruta física de RDWeb apunta a C:\Windows\Web\RDWeb (carpeta por defecto del rol). Alternativamente, valida por PowerShell:

Import-Module WebAdministration

¿Existe RDWeb\Pages bajo Default Web Site?

\$rdwebPages = "IIS:\Sites\Default Web Site\RDWeb\Pages"
"Existe RDWeb\Pages: {0}" -f (Test-Path \$rdwebPages)

Lista aplicaciones bajo Default Web Site

Get-WebApplication -Site "Default Web Site" |
Select-Object path, physicalPath, applicationPool | Format-Table -Auto 

Si faltan RDWeb o Pages, repara/reinstala el rol RD Web Access para que IIS cree la aplicación y su estructura. No intentes “simular” la estructura a mano salvo que sepas exactamente qué hace el rol, porque el módulo se apoya en esa detección para publicar el cliente.

Si Default Web Site fue eliminado/renombrado o RDWeb se movió

El módulo no expone parámetros para apuntar a un sitio o ruta distinta. Las opciones realistas son:

  • Restaurar Default Web Site con sus bindings y devolver RDWeb a su ubicación estándar.
  • Reinstalar el rol RD Web Access (esto recrea RDWeb y su estructura bajo el Default Web Site).

Comandos útiles:

# Copia de seguridad de la configuración de IIS antes de cambios
& "$env:windir\system32\inetsrv\appcmd.exe" add backup "pre-rdweb-fix-$(Get-Date -Format yyyyMMddHHmmss)"

Reinstala (o repara) el rol RD Web Access

Uninstall-WindowsFeature RDS-Web-Access -Restart:\$false
Install-WindowsFeature RDS-Web-Access -IncludeManagementTools -Restart:\$false

Verifica que el sitio Default Web Site existe y está iniciado

Get-Website -Name "Default Web Site" | Format-List name,state,bindings,physicalPath 

Tras restaurar la ruta estándar, vuelve a publicar el cliente web.

Publica correctamente el cliente web (con certificado del Broker)

Orden recomendado, ejecutado en el servidor de RD Web Access:

# 1) Instala/actualiza el paquete del cliente
Install-RDWebClientPackage

2) Importa el certificado público del RD Connection Broker (.cer)

Import-RDWebClientBrokerCert "C:\ruta\al\broker.cer"

3) Publica en Producción con la última versión disponible

Publish-RDWebClientPackage -Type Production -Latest 

Si el certificado no está disponible o es inválido, el propio módulo se detiene.

Evita PowerShell 7 para estos cmdlets

Usa Windows PowerShell 5.1. En algunos entornos, ejecutar los cmdlets desde PowerShell 7 provoca fallos no evidentes. Verifica con $PSVersionTable.PSVersion.

Valida el resultado

Accede a https://<FQDN-del-servidor>/RDWeb/webclient/index.html desde un navegador moderno. El FQDN debe coincidir con el CN/SAN del certificado que usa el sitio en IIS. Comprueba que carga la interfaz HTML5 del cliente y que puedes iniciar sesión.

Checklist rápido de diagnóstico

  • [ ] Los cmdlets se ejecutan en el servidor que hospeda RD Web Access y en consola elevada.
  • [ ] El rol Remote Desktop Web Access aparece instalado en Server Manager (Get-WindowsFeature RDS-Web-Access = Installed).
  • [ ] En IIS existe Default Web Site → RDWeb → Pages y el application pool está iniciado.
  • [ ] Install-RDWebClientPackage finalizó sin errores e Import-RDWebClientBrokerCert se ejecutó con el .cer correcto.
  • [ ] Publish‑RDWebClientPackage crea/actualiza RDWeb/webclient (o webclient‑test) en IIS.

Comandos de verificación útiles

# Comprueba que el módulo esté disponible
Get-Module -ListAvailable RDWebClientManagement | Select-Object Name,Version,Path

Lista los comandos del módulo

Get-Command -Module RDWebClientManagement

¿Existe la app RDWeb?

Import-Module WebAdministration
Get-WebApplication -Site "Default Web Site" | Where-Object { $\_.path -eq "/RDWeb" }

¿Existe RDWeb\Pages?

Test-Path "IIS:\Sites\Default Web Site\RDWeb\Pages"

¿Se publicó webclient?

Test-Path "IIS:\Sites\Default Web Site\RDWeb\webclient"

¿Rol instalado?

Get-WindowsFeature RDS-Web-Access 

Tabla de síntomas, causa raíz y corrección

SíntomaCausa raízAcción de corrección
“RD Web Access does not appear to be installed on the system.”La aplicación RDWeb no existe donde la espera el módulo o se ejecuta en el servidor equivocado.Ejecutar en el servidor con el rol RD Web Access. Restaurar Default Web Site → RDWeb → Pages o reinstalar el rol.
Publish-RDWebClientPackage indica cliente instalado y luego fallaLa validación de RDWeb falla tras comprobar el paquete.Validar estructura de IIS. El módulo solo publica en RDWeb/webclient.
La URL /RDWeb/webclient/ no cargaPublicación incompleta o bindings/certificado SSL del sitio incorrectos.República tras importar el certificado del Broker. Verifica bindings en IIS y el FQDN.
Errores extraños usando PowerShell 7Incompatibilidad de cmdlets con PS 7 en este escenario.Usar Windows PowerShell 5.1.
Rol RD Web Access aparece instalado pero no hay app RDWebEl Default Web Site fue eliminado/renombrado o se movió RDWeb a otro sitio.Restaurar Default Web Site y reinstalar el rol para recrear la app RDWeb.

Procedimiento de recuperación recomendado para IIS

  1. Respaldar IIS con appcmd add backup.
  2. Reinstalar RD Web Access si la app RDWeb falta o está dañada.
  3. Verificar bindings de Default Web Site (HTTPS 443 con el certificado correcto).
  4. Republicar el cliente HTML5 siguiendo el orden: instalar paquete → importar certificado → publicar.
  5. Probar acceso a /RDWeb/webclient/ con el FQDN del certificado.

Script de preflight para detectar el problema antes de publicar

Este script realiza comprobaciones mínimas (elevación, versión de PowerShell, rol instalado, estructura de IIS, certificado del Broker y existencia de la carpeta de publicación) y resalta exactamente dónde falla el entorno.

# Preflight RD Web Client - Windows Server 2019
Ejecutar en Windows PowerShell 5.1 (consola elevada) en el servidor de RD Web Access

function Test-RDWebEnvironment {
\[CmdletBinding()]
param(
\[string]\$SiteName = "Default Web Site",
\[string]\$RdWebPath = "/RDWeb",
\[string]\$BrokerCertPath = \$null
)```
$report = [ordered]@{}
try {
    $report["Fecha"] = Get-Date
    $report["PowerShellVersion"] = $PSVersionTable.PSVersion.ToString()
    $isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()
               ).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
    $report["SesionElevada"] = $isAdmin

    $feature = Get-WindowsFeature RDS-Web-Access -ErrorAction Stop
    $report["RolRDSWebAccessInstalado"] = $feature.Installed

    Import-Module WebAdministration -ErrorAction Stop
    $site = Get-Website -Name $SiteName -ErrorAction SilentlyContinue
    $report["DefaultWebSiteExiste"] = [bool]$site

    $rdwebApp = if ($site) { Get-WebApplication -Site $SiteName | Where-Object { $_.path -eq $RdWebPath } }
    $report["AppRDWebEncontrada"] = [bool]$rdwebApp

    $rdwebPagesPath = "IIS:\Sites\{0}{1}\Pages" -f $SiteName, $RdWebPath
    $report["ExisteRDWebPages"] = Test-Path $rdwebPagesPath

    $webclientPath = "IIS:\Sites\{0}{1}\webclient" -f $SiteName, $RdWebPath
    $report["ExisteRDWebWebclient"] = Test-Path $webclientPath

    if ($BrokerCertPath) {
        $report["BrokerCertExiste"] = Test-Path $BrokerCertPath
    } else {
        $report["BrokerCertExiste"] = $null
    }

    $bindings = if ($site) { $site.bindings.Collection.bindingInformation }
    $report["Bindings"] = $bindings -join "; "

    return [PSCustomObject]$report
}
catch {
    Write-Warning $_.Exception.Message
    $report["Error"] = $_.Exception.Message
    return [PSCustomObject]$report
}
```
}

Uso:

Test-RDWebEnvironment -BrokerCertPath "C:\ruta\al\broker.cer" | Format-List \*

Interpretación rápida: si AppRDWebEncontrada y ExisteRDWebPages devuelven False, estás ante la causa descrita: el módulo no encuentra la aplicación RDWeb en su ubicación estándar y, por tanto, falla con el mensaje “RD Web Access does not appear to be installed on the system.”

Buenas prácticas para evitar que vuelva a ocurrir

  • No muevas ni renombres Default Web Site ni RDWeb si pretendes usar el módulo oficial para publicar el HTML5 client.
  • Separa roles por servidor (Broker, Web Access, Session Host) y documenta en qué nodo vive cada rol para ejecutar los cmdlets exactamente donde corresponde.
  • Automatiza un “preflight” (como el script anterior) en tus playbooks de mantenimiento/actualización del RD Web Client.
  • Certificados válidos: renueva y almacena el .CER público del Broker junto con los procedimientos de publicación.
  • PowerShell consistente: estandariza el uso de Windows PowerShell 5.1 para las tareas del Web Client.

Preguntas frecuentes

¿Puedo indicar otro sitio o ruta de IIS al cmdlet de publicación?
No. El módulo está diseñado para localizar RDWeb bajo Default Web Site y publicar en RDWeb/webclient. Si la app está en otra ruta, el módulo no la detecta y aborta.

¿Puedo solucionar esto creando manualmente la carpeta webclient?
No es recomendable. Aunque crees la carpeta, si el módulo no valida RDWeb/Pages fallará igual. Lo correcto es restaurar la app RDWeb y su jerarquía, o reinstalar el rol.

El paquete del cliente se instala pero no publica, ¿por qué?
La instalación del paquete sucede localmente; la publicación depende de IIS y de la estructura de RDWeb. Si esa validación falla, aparece el error.

¿PowerShell 7 es compatible?
Para este procedimiento utiliza Windows PowerShell 5.1. Evita PS 7 con estos cmdlets.

Conclusión

El error “RD Web Access does not appear to be installed on the system.” no suele indicar que el rol esté realmente ausente, sino que el módulo no encuentra la aplicación RDWeb donde la espera. Ejecutar los cmdlets en el servidor correcto, confirmar y restaurar la estructura Default Web Site → RDWeb → Pages, y publicar en el orden correcto (instalar paquete → importar certificado → publicar) resuelve el problema en la mayoría de los casos.

Notas y referencias

  • [1] Código del módulo RDWebClientManagement.psm1 (validación de la app RDWeb y rutas).
  • [2] Guía oficial: Set up Remote Desktop web client for users (pasos de instalación, importación del certificado y publicación).
  • [3] Descripción de la aplicación RDWeb y estructura en IIS.
  • [4] Detalles de publicación en RDWeb/webclient y webclient-test.
  • [5] Casuística en entornos que usaron PowerShell 7 (recomendación: usar PS 5.1).

Plantilla de ejecución recomendada

# 0) En el servidor de RD Web Access, consola elevada de Windows PowerShell 5.1
1) Verificación rápida
Get-WindowsFeature RDS-Web-Access
Import-Module WebAdministration
Test-Path "IIS:\Sites\Default Web Site\RDWeb\Pages"  # Debe ser True

2) Publicación ordenada

Install-RDWebClientPackage
Import-RDWebClientBrokerCert "C:\ruta\al\broker.cer"
Publish-RDWebClientPackage -Type Production -Latest

3) Validación

Start-Sleep -Seconds 3
Test-Path "IIS:\Sites\Default Web Site\RDWeb\webclient"  # Debe ser True 

Con esta guía, además de entender por qué aparece el error, dispones de verificaciones y comandos concretos para dejar el entorno en condiciones y publicar el cliente HTML5 de Escritorio Remoto con garantías.

Índice