Me he encontrado varias veces con un problema relacionado con las unidades de Red mapeadas mediante un script de inicio de sesión o mediante una política global, por el que, cuando un usuario Administrador ejecuta un proceso de manera elevada, las unidades no están disponibles, es como si las unidades mapeadas desaparecieran. Este problema sólo ocurre si el control de cuentas de usuario (UAC) está activo.

En la siguiente imagen vemos el uso del comando “subst” para crear una unidad virtual desde una sesión de PowerShell:
image

La siguiente imagen muestra una sesión de PowerShell pero iniciada como administrador (Run As Administrator):
image

El efecto con la “substitución” es el mismo que con las unidades de red: la unidad mapeada con el usuario cuando se ejecuta de manera estándar no está disponible cuando se ejecuta de manera elevada. El problema está relacionado con el control de cuentas de usuario y la ejecución, por defecto, de los procesos con un token de seguridad limitado.

En pocas palabras: al iniciar sesión con un usuario administrado, la autoridad local de seguridad (LSA) crea dos tokens de seguridad, uno con privilegios limitados y otro con los privilegios normales del administrador. La sesión interactiva se arranca utilizando un token de seguridad limitado, cuando elevamos un proceso (ejecutar como Administrador) utilizamos el segundo token de seguridad (el completo, con todos los privilegios).

Privilegios del usuario Administrador en una sesión de PowerShell (token limitado):image

Privilegios del usuario administrador en una sesión de PowerShell con elevación (token completo):image

En la práctica son como dos sesiones diferentes, por lo que las unidades que se han mapeado en la sesión interactiva no están disponibles, a priori, cuando se elevan los privilegios.

Para solventarlo podemos utilizar el valor de configuración EnableLinkedConnections del registro para que se permita compartir las conexiones de red entre el token limitado y el token completo, tal y como se detalla en el KB937624:

Para configurar el valor EnableLinkedConnections del Registro, siga estos pasos:

  1. Haga clic en Inicio, escriba regedit en el cuadro Iniciar búsqueda y presione ENTRAR.
  2. Busque la siguiente subclave del Registro y haga clic en ella con el botón secundario:

    HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Windows\CurrentVersion\Policies\System

  3. Seleccione Nuevo y haga clic en Valor DWORD.
  4. Escriba EnableLinkedConnections y presione ENTRAR.
  5. Haga clic con el botón secundario en EnableLinkedConnections y, después, haga clic en Modificar.
  6. En el cuadro Información del valor, escriba 1 y haga clic en Aceptar.
  7. Cierre el Editor del Registro y reinicie el equipo.

Esta solución aplica a tanto a Windows 7 como a Windows Vista.