Error “An unknown command-line option” en Exchange Server 2019 CU14: causas y solución paso a paso

¿Ves “An unknown command-line option” al instalar Exchange Server 2019 CU14? No es un bug del instalador, casi siempre es el binario equivocado o una invocación incorrecta. En esta guía te explico las causas reales, cómo comprobarlas y los comandos exactos para resolverlo en minutos.

Índice

Contexto del error

Durante instalaciones o actualizaciones desatendidas de Exchange Server 2019 en Windows Server 2019, muchos administradores ejecutan:

Setup.exe /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF

y reciben el mensaje:

An unknown command-line option was specified.

La confusión aparece porque, desde Exchange 2019 CU11, el instalador requiere …DiagnosticDataON o …DiagnosticDataOFF para aceptar la licencia. Si aparece “unknown command-line option”, lo más probable es que no estés ejecutando el Setup.exe correcto (otro setup.exe del sistema o de una versión distinta), o lo estás lanzando desde PowerShell sin la ruta explícita, de modo que el shell resuelve a un binario diferente. [2] [3] [4]

Síntomas típicos

  • Mensaje “An unknown command-line option” inmediatamente al iniciar Setup.
  • Setup.exe /? no muestra los modificadores …DiagnosticDataON/OFF.
  • El instalador se abre en modo gráfico inesperadamente o no reconoce otros switches válidos.
  • En PowerShell, escribir Setup.exe “a secas” desde la carpeta del medio no ejecuta el Setup de Exchange. [4]

Causa raíz

En casi todos los casos, el shell está ejecutando un setup.exe distinto al de tu medio de Exchange CU14:

  • Resolución por PATH: PowerShell no busca en el directorio actual salvo que uses .\. Es decir, Setup.exe.\Setup.exe. [4]
  • Confusión con otros “setup.exe”: Windows incluye C:\Windows\System32\setup.exe, Office tiene su propio setup.exe, etc. Where los delata.
  • Binario de Exchange equivocado: extraes una CU distinta (p. ej., CU10) o ejecutas un Setup de 2016/otra build que no reconoce …DiagnosticDataON/OFF. [2] [3]
  • Invocación desde rutas UNC o scripts que cambian el contexto: el proceso termina resolviendo a otro ejecutable con el mismo nombre.

Diagnóstico rápido

Antes de cambiar nada, verifica qué setup.exe estás ejecutando y qué switches acepta:

:: En CMD elevado
where setup.exe

\:: En PowerShell elevado
Get-Command setup.exe -All | Format-Table -Auto </code></pre>

<p>Ahora, desde la carpeta raíz de tu medio (ISO montado o carpeta extraída) comprueba la ayuda del binario que <em>sí</em> quieres usar:</p>
<pre><code>:: CMD (elevado) – reemplaza E:\ por tu letra de unidad
E:\Setup.exe /?

\:: PowerShell (elevado) – si ya hiciste cd a la carpeta del medio
.\Setup.exe /? </code></pre>

<p>Si la salida no muestra <code>/IAcceptExchangeServerLicenseTerms_DiagnosticDataON</code> y <code>…OFF</code>, no es el instalador correcto para CU11 o posterior. [2] [3]</p>

<h2>Solución paso a paso</h2>
<ol>
  <li><strong>Ejecuta Setup con ruta explícita.</strong>
    <ul>
      <li>CMD elevado: <code>E:\Setup.exe …</code></li>
      <li>PowerShell elevado: <code>.\Setup.exe …</code> (si estás en la carpeta del medio) o <code>E:\Setup.exe …</code></li>
    </ul>
    <p>Esto evita que el shell invoque otro <code>setup.exe</code> en el PATH. [4]</p>
  </li>
  <li><strong>Confirma que el medio es Exchange 2019 CU14 (o superior).</strong>
    <p>Desde septiembre de 2021 cambiaron los switches de licencia y los instaladores antiguos no reconocerán <code>…DiagnosticDataON/OFF</code>. Ejecuta <code>E:\Setup.exe /?</code> y verifica la lista de modificadores. [2] [3]</p>
  </li>
  <li><strong>Incluye una acción real del Setup.</strong>
    <p>El modificador de licencia no es una acción por sí mismo. Añade <code>/Mode:Install</code>, <code>/Mode:Upgrade</code> o las fases de preparación de Active Directory (<code>/PrepareSchema</code>, <code>/PrepareAD</code>, etc.). [2]</p>
  </li>
  <li><strong>Extended Protection en CU14.</strong>
    <p>CU14 habilita <em>Extended Protection</em> de forma predeterminada. Solo si tienes una razón válida para omitirla temporalmente, agrega <code>/DoNotEnableEP</code> o <code>/DoNotEnableEP_FEEWS</code>. Úsalo con criterio. [2]</p>
  </li>
  <li><strong>Si persiste el problema, revisa los logs.</strong>
    <p>Abre <code>C:\ExchangeSetupLogs\ExchangeSetup.log</code> y archivos correlacionados; allí verás el argumento exacto que el proceso recibió y la validación que falló. [5]</p>
  </li>
</ol>

<h2>Tabla de comprobaciones rápidas</h2>
<table>
  <thead>
    <tr>
      <th>Comprobación</th>
      <th>Comando o método</th>
      <th>Qué debes ver</th>
      <th>Qué indica si falla</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>¿Qué “setup.exe” se ejecuta?</td>
      <td><code>where setup.exe</code> (CMD) o <code>Get-Command setup.exe -All</code> (PS)</td>
      <td>Rutas al medio de Exchange (ISO o carpeta)</td>
      <td>Rutas a <code>System32\setup.exe</code> u otros “setup.exe” ajenos</td>
    </tr>
    <tr>
      <td>¿El binario soporta ON/OFF?</td>
      <td><code>E:\Setup.exe /?</code> o <code>.\Setup.exe /?</code></td>
      <td>Switches <code>…DiagnosticDataON</code> y <code>…DiagnosticDataOFF</code></td>
      <td>Ausencia de estos switches =&gt; build de Setup incorrecta</td>
    </tr>
    <tr>
      <td>¿Ejecución elevada?</td>
      <td>Icono “Administrador” en la consola / <code>whoami /groups</code></td>
      <td>Procesos con token Administrador</td>
      <td>Faltan permisos para instalar/actualizar</td>
    </tr>
    <tr>
      <td>¿Logs indican argumentos?</td>
      <td>Abrir <code>C:\ExchangeSetupLogs\*.log</code></td>
      <td>Registro de switches recibidos y validaciones</td>
      <td>Argumento de licencia no reconocido, otra ruta ejecutada</td>
    </tr>
  </tbody>
</table>

<h2>Comandos listos para usar</h2>
<h3>Preparar Active Directory</h3>
<p>Para un primer servidor de Exchange en el bosque (reemplaza <em>Contoso</em> por tu organización):</p>
<pre><code>E:\Setup.exe /PrepareSchema /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF
E:\Setup.exe /PrepareAD /OrganizationName:"Contoso" /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF
E:\Setup.exe /PrepareAllDomains /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF
</code></pre>
<p>Permisos: <em>Schema Admins</em> y <em>Enterprise Admins</em> para las fases de preparación. [2]</p>

<h3>Instalar un nuevo servidor tipo Mailbox</h3>
<pre><code>E:\Setup.exe /Mode:Install /Roles:Mailbox /InstallWindowsComponents ^
/IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF
</code></pre>
<p>Necesitas ejecutar en una consola elevada. Agrega <code>/DoNotEnableEP</code> solo si es imprescindible (y entiendes el impacto). [2]</p>

<h3>Actualizar un servidor existente a CU14 (o posterior)</h3>
<pre><code>E:\Setup.exe /Mode:Upgrade /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF
</code></pre>
<p>En PowerShell, usa ruta completa o el prefijo <code>.\</code> para evitar ejecutar el <em>setup</em> equivocado. [2]</p>

<h3>Instalar o actualizar solo herramientas de administración</h3>
<p>Útil para jump servers o estaciones de administración remota:</p>
<pre><code>E:\Setup.exe /Mode:Install /Roles:ManagementTools /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF
</code></pre>

<h2>Errores de sintaxis frecuentes y cómo evitarlos</h2>
<ul>
  <li><strong>Guiones bajos vs guiones medios:</strong> el switch correcto usa <em>guiones bajos</em> (<code></code>): <code>/IAcceptExchangeServerLicenseTermsDiagnosticDataOFF</code>. No escribas <code>-</code> ni elimines el subrayado.</li>
  <li><strong>Ortografía exacta:</strong> <code>DiagnosticDataON/OFF</code> (sin “s” ni espacios). Cualquier variación provoca el mismo error genérico.</li>
  <li><strong>Comillas “tipográficas”:</strong> copia/pega desde documentos que convierten <code>"</code> en <code>“ ”</code> y romperás el comando. Reemplaza por comillas rectas.</li>
  <li><strong>Separadores y espacios:</strong> cada parámetro inicia con <code>/</code>; evita concatenarlos o separar con caracteres inválidos.</li>
  <li><strong>Continuación de línea:</strong> en CMD usa <code>^</code>; en PowerShell, usa el <em>backtick</em> <code>`</code> o concatena en una sola línea. Ejemplos:</li>
</ul>
<table>
  <thead>
    <tr>
      <th>Shell</th>
      <th>Correcto</th>
      <th>Incorrecto</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>CMD</td>
      <td><pre><code>E:\Setup.exe /Mode:Install ^
/Roles:Mailbox ^
/IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF
</code></pre></td>
      <td><pre><code>E:\Setup.exe /Mode:Install `
/Roles:Mailbox `
/IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF



PowerShell

.\Setup.exe /Mode:Install `
/Roles:Mailbox `
/IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF
.\Setup.exe /Mode:Install ^
/Roles:Mailbox ^
/IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF

Buenas prácticas antes de lanzar Setup

  • Eleva la consola (CMD/PowerShell “Ejecutar como administrador”).
  • Desbloquea el medio si descargaste un ZIP: clic derecho > Propiedades > “Desbloquear”.
  • Prefiere ISO montado sobre rutas UNC para reducir sorpresas de permisos.
  • Requisitos de Windows: puedes delegarlos a /InstallWindowsComponents o instalarlos previamente con Install-WindowsFeature.
  • Antivirus: excluye rutas temporales y la carpeta de Exchange durante la instalación para evitar bloqueos de archivos.
  • Respalda AD/Exchange antes de un upgrade en producción.

Extended Protection en CU14

CU14 habilita Extended Protection por defecto para mitigar ataques de relay. Esto cambia la configuración de autenticación de IIS para los virtual directories de Exchange.

  • Si tu publicación inversa o dispositivos no soportan EP todavía, puedes omitirla temporalmente con /DoNotEnableEP o solo para Front End EWS con /DoNotEnableEP_FEEWS. [2]
  • Planifica su activación definitiva cuanto antes; omitir EP debe ser temporal y consciente.

Comprobaciones posteriores a la instalación

  • Verifica la versión: en el Exchange Management Shell: Get-ExchangeServer | fl Name,AdminDisplayVersion
  • Salud básica: Test-ServiceHealth Get-ServerComponentState -Identity $env:COMPUTERNAME
  • Revisa los virtual directories y URLs internas/externas si el servidor es nuevo.

Preguntas frecuentes

¿Puedo ejecutar Setup desde PowerShell ISE?
No es recomendable. Usa PowerShell “puro” o CMD en modo elevado para evitar problemas de entorno y redirecciones de salida.

¿Por qué /IAcceptExchangeServerLicenseTerms “a secas” ya no funciona?
Porque fue retirado; en 2019 CU11 y posteriores debes usar …DiagnosticDataON o …DiagnosticDataOFF. [2] [3]

¿Puedo usar una ruta UNC para el medio?
Sí, pero asegúrate de que la cuenta tenga permisos y que la latencia no corte la copia de binarios. Preferible montar ISO localmente.

¿Por qué al escribir Setup.exe en PowerShell no se ejecuta el de mi carpeta?
Porque PowerShell no busca en el directorio actual por defecto. Usa .\Setup.exe o ruta completa (E:\Setup.exe). [4]

Resumen ejecutivo

Si te aparece “An unknown command-line option” con /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF durante la instalación o actualización de Exchange 2019 CU14, el problema no es el switch, sino el binario: estás llamando al setup.exe equivocado o sin ruta explícita. Lanza siempre Setup con ruta completa o .\, confirma que el medio realmente es CU14 (o posterior) con /?, incluye una acción (/Mode:Install/Upgrade o /Prepare*), y recurre a los logs en C:\ExchangeSetupLogs si necesitas evidencias. Con estos pasos, el error desaparece y podrás continuar con tu instalación de forma segura. [2] [3] [4] [5]

Plantilla de comandos por escenario

EscenarioComando recomendadoNotas
Preparar esquemaE:\Setup.exe /PrepareSchema /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFFRequiere Schema Admins
Preparar ADE:\Setup.exe /PrepareAD /OrganizationName:"Contoso" /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFFRequiere Enterprise Admins
Preparar todos los dominiosE:\Setup.exe /PrepareAllDomains /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFFRequiere permisos forest-wide
Instalación nueva MailboxE:\Setup.exe /Mode:Install /Roles:Mailbox /InstallWindowsComponents /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFFAgregar /DoNotEnableEP solo si es imprescindible
Actualizar a CU14E:\Setup.exe /Mode:Upgrade /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFFDetendrá y actualizará roles instalados
Solo herramientasE:\Setup.exe /Mode:Install /Roles:ManagementTools /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFFPara administración remota

Checklist final

  • Consola elevada (CMD/PowerShell).
  • Ruta explícita al Setup.exe del medio (E:\ o .\).
  • E:\Setup.exe /? muestra …DiagnosticDataON/OFF.
  • Acción especificada (/Mode:Install/Upgrade o /Prepare*).
  • (Opcional) /DoNotEnableEP solo si es estrictamente necesario.
  • Monitorea C:\ExchangeSetupLogs\ExchangeSetup.log para validación.

Notas: El modificador /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF es válido en Exchange 2019 CU11 o posterior. El error suele deberse a invocar el binario equivocado o a ejecutarlo sin ruta explícita en PowerShell. Las recomendaciones de esta guía se basan en la documentación oficial y artículos de solución de problemas. [2] [3] [4] [5] El hilo original que reportó el error no aportó la solución técnica; aquí la hemos condensado en pasos prácticos. [1]

Índice