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.
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 (RDWeb
→ Pages
) 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 eImport-RDWebClientBrokerCert
se ejecutó con el.cer
correcto. - [ ]
Publish‑RDWebClientPackage
crea/actualizaRDWeb/webclient
(owebclient‑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íntoma | Causa raíz | Acció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 falla | La 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 carga | Publicació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 7 | Incompatibilidad de cmdlets con PS 7 en este escenario. | Usar Windows PowerShell 5.1. |
Rol RD Web Access aparece instalado pero no hay app RDWeb | El 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
- Respaldar IIS con
appcmd add backup
. - Reinstalar RD Web Access si la app
RDWeb
falta o está dañada. - Verificar bindings de Default Web Site (HTTPS 443 con el certificado correcto).
- Republicar el cliente HTML5 siguiendo el orden: instalar paquete → importar certificado → publicar.
- 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
ywebclient-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.