Anular HOMEDRIVE y HOMEPATH como usuario de Windows 7

50

Mi empleador tiene una política de grupo de Active Directory que establece mi HOMEDRIVE para computadora portátil con Windows 7 en "M:" (una unidad de red asignada) y mi HOMEPATH en "\". Como tengo permisos de solo lectura para la raíz de esa unidad compartida, no puedo crear archivos o directorios en mi directorio de inicio de Windows. Mis intentos de trabajar con el departamento de TI no han tenido éxito.

¿Hay alguna manera para a nivel mundial cambiar estos envars en el arranque o inicio de sesión? Necesito que todas las aplicaciones utilicen valores alternativos (como "C:" y "\ Users \ myname"). Tengo algunas utilidades instaladas (como gvim y otras) que almacenan archivos de preferencias en el directorio de inicio del usuario.

IMPORTANTE : Cambiar estos valores en "Propiedades del sistema> Variables de entorno" no funciona . He intentado configurarlos como variables de usuario y sistema (incluido un reinicio). Escribir SET HOMEen una ventana de DOS muestra claramente que mi configuración se ignora. Además, el uso de "Iniciar en" en un acceso directo de Windows tampoco resolverá esto, ya que necesito cosas como elementos del menú contextual del Explorador (como "Editar con Vim") para funcionar correctamente.

Tengo derechos de administrador en el portátil de esta empresa, pero no soy un gurú de Win7. En el pasado, un script de arranque habría resuelto esto en un minuto. ¿Es posible hoy? Gracias.

MykennaC
fuente
2
Su departamento de TI ha establecido estas políticas por una razón. Si ha tratado de resolverlo con ellos y se han negado a cambiarlo, probablemente haya una buena razón. Si luego continúa ignorando sus consejos y va en contra de lo que le han pedido, prepárese para una acción disciplinaria si es atrapado.
Joe Taylor
29
Después de más de 30 años en esta industria, he aprendido que la política de TI para el usuario promedio de PC a menudo es inadecuada (o incluso obstructiva) para desarrolladores y usuarios avanzados. A menudo, TI ha tenido que satisfacer las necesidades de los desarrolladores de manera diferente, y si esta es otra experiencia de aprendizaje para ellos aquí, entonces me complace ayudar. Me encantaría escuchar una razón comercial válida para hacer inutilizable el directorio de inicio de un usuario.
MykennaC
2
La razón por la cual no se soluciona el problema, se muestra que no es viable para ciertos usuarios y se propone un GPO por separado para dichos usuarios. Moverse de esta manera constructiva es mucho más probable que funcione que tratar de eludir las políticas de dominio con hacks.
Joe Taylor
66
Finalmente se puso en contacto conmigo. No van a cambiar nada. Sí, la política oficial de la compañía es proporcionar un directorio de inicio del usuario donde no se me permite crear archivos. Las aplicaciones de Windows que intentan usar el directorio de inicio de usuario predeterminado para cosas como archivos de preferencias fallarán. ¿No hay ningún asistente aquí que pueda ofrecerme alguna solución a esto?
MykennaC
3
sí @ D0rf, debería darse la vuelta y simplemente tomarlo. Si TI hace que su trabajo sea imposible, debe luchar y provocar un escándalo hasta que se cambie. Si eres un desarrollador pasivo, entonces mereces tu parte en la vida en una empresa terrible que no te da las herramientas que necesitas para tu trabajo.
Scott,

Respuestas:

38

A continuación hay algunos trucos que he desarrollado. No son elegantes, pero pueden ser funcionales en su entorno corporativo.

HOMEDRIVE Only

Parece que muchas aplicaciones solo usan HOMEDRIVE / HOMEPATH. En ese caso, puede crear una secuencia de comandos de inicio que reasigne la letra de la unidad base a su ruta de usuario local a través de la ruta de administración de la unidad UNC:

set HOME
HOMEDRIVE=G:
HOMEPATH=\
HOMESHARE=\\Server\Users\username

net use g: /delete
net use g: \\localhost\C$\Users\username

HOMEDRIVE Local predeterminado

Si no necesita acceder a "Servidor" por su nombre, puede hacer que la configuración de la directiva de grupo falle y vuelva a su máquina local. La forma más fácil de hacer esto es agregar una entrada a C: \ Windows \ System32 \ drivers \ etc \ hosts como:

127.0.0.1   Server

Después de reiniciar, debería ver algo como:

set HOME
HOMEDRIVE=C:
HOMEPATH=\Users\username

HOMEDRIVE / SHARE con rutas UNC híbridas locales / remotas

Si desea acceder al "Servidor" por nombre para algunas rutas UNC, pero anula otras con rutas locales, he desarrollado la siguiente abominación. Nota: las conexiones directas del servidor al "Servidor" aún se resolverán en su máquina local. Recomiendo esta solución solo si "Servidor" es solo un servidor de archivos:

  1. Modifique C: \ Windows \ System32 \ drivers \ etc \ hosts para redirigir "Servidor" a su máquina local:

    127.0.0.1   Server
    
  2. Agregue el siguiente valor de registro de cadenas múltiples a HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0 para permitir que las credenciales se pasen a la ruta UNC local:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\
    BackConnectionHostNames = Server
    
  3. Cree un directorio ficticio que servirá como raíz del servidor:

    set DUMMY_LOC=C:\Server_Dummy
    
    mkdir %DUMMY_LOC%
    cd /D %DUMMY_LOC%
    
  4. Para cada ruta UNC que desee dirigir al servidor real:

    rem Alternatively you can use an IP below, but it is more likely to break if DNS changes
    set SERVER_FQDN=Server.network.blah.com
    
    rem Take a look at what's available...
    net view \\%SERVER_FQDN%\
    
    mklink /D Remote_Example \\%SERVER_FQDN%\Remote_Example
    net share Remote_Example=%DUMMY_LOC%\Remote_Example /grant:everyone,FULL
    
  5. Para cada recurso compartido UNC que desee definir localmente (como Usuarios):

    rem The link isn't really necessary for the share, I just find it easier to manage when all of these hacks are in the same directory
    
    mklink /D Users C:\Users
    net share Users=%DUMMY_LOC%\Users /grant:everyone,FULL
    
  6. Reiniciar

Por ejemplo, esto permitiría resolver las siguientes rutas UNC:

\\Server\Remote_Example => \\Server.network.blah.com\Remote_Example
\\Server\Users          => C:\Users

Esta resolución de ruta debe ocurrir antes de las asignaciones de unidades. Siempre que las rutas UNC asociadas con las asignaciones sean válidas (ya sean locales o remotas), las letras de unidad deben comportarse como se espera.

Por ejemplo, en mi configuración, las siguientes variables son forzadas por el dominio:

set HOME
HOMEDRIVE=G:
HOMEPATH=\
HOMESHARE=\\Server\Users\username

Pero debido a mis asignaciones, el resultado es:

G: => \\Server\Users\username => C:\Users\username
Terrance
fuente
Parece que estas sugerencias podrían ayudar SI estaba trabajando en la línea de comando. Para afectar una aplicación (como gvim) probablemente necesitaría crear un contenedor. Iterar sobre todas las aplicaciones afectadas suena como mucho trabajo, sin mencionar el cambio de asociaciones de archivos, etc. Reasignar mi M: unidad en el momento del arranque es una buena sugerencia, pero cómo hacerlo globalmente cuando Windows se inicia (para afectar a todos aplicaciones / shells)? Espero que estas sugerencias ayuden a otros, pero no creo que resuelvan mi OP
MykennaC
3
No he necesitado estos métodos en mucho tiempo, pero recuerdo haberlos desarrollado específicamente para gvim, que creo que estaba usando HOMEDRIVE y HOMEPATH. Estos métodos no requieren que ejecute desde la línea de comandos; cualquier aplicación que use las variables o la letra de unidad se verá afectada. Los métodos 2 y 3 son "permanentes" y solo deben ejecutarse una vez para que los cambios se mantengan. El Método # 1 se puede ejecutar automáticamente al inicio colocando un acceso directo en C: \ Users \ <You> \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup, o configurando una tarea en el Programador de tareas. ¡Espero que esto ayude!
Terrance
@terrance Ahhh, la belleza de las abominaciones bien elaboradas. LMAO Gracias por la información aquí, y hay TONELADAS aquí ...
David I. McIntosh
3

La mejor solución que encontré fue establecer variables durante el inicio de sesión y antes userinit.exe.

Esto es lo que hice. Primero creó un archivo por lotes al C:\Windows\System32\userinit.cmdcontener

@ECHO OFF
SET HOMEDRIVE=C:
SET HOMEPATH=\Users\%USERNAME%
SET HOMESHARE=\\localhost\C$\Users\%USERNAME%
@START C:\Windows\system32\userinit.exe

y luego cambió el valor de HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinita C:\Windows\System32\userinit.cmden el registro.

Más información en: https://technet.microsoft.com/en-us/library/cc939862.aspx

Ali Malekpour
fuente
Trabajó en Win7, pero no en Win10.
Hormigas
1

Lo usé SETXen un script de inicio y eso funcionó para mí. Mira mi respuesta .

Mark Mikofski
fuente
0

Creo que estas rutas se configuran automáticamente en el lugar donde se encuentra su perfil de usuario. La unidad de inicio a la que te refieres es el lugar donde están tu ntuser.dat y los datos de la aplicación y otras carpetas de perfil de usuario, ¿correcto? De vuelta con NT3.x, el "perfil de usuario" era solo su sección de registro de usuarios con configuraciones y podía establecer una ruta de inicio separada para cada usuario. Se unificaron en NT4 como un perfil de usuario con un escritorio, mis documentos, menú de inicio, etc.

Las ubicaciones de todos los perfiles se almacenan en claves de registro en

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

Encontrará algunos valores para los perfiles especiales y las subclaves: uno para cada perfil activo en el sistema. Los configura el SID de la cuenta de usuario a la que pertenecen. La forma más fácil de encontrar el tuyo sería desplazarte por cada uno buscando el camino correcto (debajo del ProfileImagePathvalor). Debería poder cambiar ese valor a la ruta que desee; entrará en vigencia la próxima vez que inicie sesión. Asegúrese de copiar primero sus archivos a la nueva ruta.

Si tiene que mover el perfil de la cuenta en la que inició sesión (es decir, inició sesión como MikeC e intenta copiar el perfil de MikeC), el núcleo bloqueará el archivo ntuser.dat (que contiene la sección del registro HKEY_CURRENT_USER). Todavía puede copiar la sección: vaya a regedit, haga clic con el botón derecho en HKEY_CURRENT_USER, seleccione exportar, cambie el tipo a archivos de sección de registro y guárdelo como ntuser.dat en su nueva ubicación.

En mi experiencia, si winlogon tiene un problema al cargar un perfil porque algo está mal configurado, creará una nueva copia del perfil predeterminado o le dará una copia temporal para usar para esa sesión y aún podrá iniciar sesión Sin embargo, recomendaría que tenga un inicio de sesión de administrador diferente para usar en el sistema en caso de que algo salga mal.

Chris Smith
fuente
Bueno, el único elemento en mi ProfileList que parece relevante es ProfileImagePath, que se muestra como C: \ Users \ mcepek. Eso coincide con lo que SET USERPROFILE me muestra, pero ese no es mi enfoque aquí. Necesito afectar HOMEPATH y HOMEDRIVE. Solo por diversión, busqué en mi registro elementos con valores o datos configurados en "M:" (solo coincide con la cadena completa = marcada) y solo encontré una computadora / HKEY_USERS / xxxx / Volatile Environment / HOMEDRIVE. Cambiarlo a C: no parecía tener ningún efecto en mi sesión de inicio de sesión actual. Después de reiniciar, el valor volvió a M: (no es una sorpresa).
MykennaC
0

Estoy publicando esto en caso de que alguien más llegue a esta pregunta a través de google. En lugar de cambiar mi directorio personal y hacer que los chicos de IS se enojen conmigo, configuré y ejecuté mi desarrollo en una máquina virtual. Microsoft ofrece Widows XP en modo virtual. http://www.microsoft.com/windows/virtual-pc/download.aspx

Christine Gregory Nicholls
fuente
0

Una alternativa algo más fácil sería ejecutar el siguiente script (env-reset.vbs) como una tarea programada al iniciar sesión, desbloquear y tal vez también cada pocos minutos.

Set shell = WScript.CreateObject("WScript.Shell")  
Set venv = shell.Environment("Volatile")  

scriptingHost = LCase(Right(Wscript.FullName,Len("cscript.exe")))
interactive = Wscript.Interactive And (scriptingHost = "cscript.exe")

If interactive Then 
  Wscript.Echo "WSCRIPT"
  Wscript.Echo "  ScriptingHost = " & scriptingHost
  Wscript.Echo "  FullName = " & Wscript.FullName
  Wscript.Echo "  ScriptFullName = " & Wscript.ScriptFullName
End If  

If interactive Then Call showVolatile()

homedrive = Left(venv("USERPROFILE"),2)
homepath = Mid(venv("USERPROFILE"),3)
If interactive Then 
  Wscript.Echo "COMPUTED"
  Wscript.Echo "  homedrive = " & homedrive
  Wscript.Echo "  homepath = " & homepath
End If  
venv("HOMEDRIVE") = homedrive
venv("HOMEPATH")  = homepath

If interactive Then Call showVolatile()

Wscript.Quit(0)

Sub showVolatile()
  Wscript.Echo "VOLATILE"
  Wscript.Echo "  USERPROFILE = " & venv("USERPROFILE")  
  Wscript.Echo "  HOMEDRIVE = " & venv("HOMEDRIVE")  
  Wscript.Echo "  HOMEPATH = " & venv("HOMEPATH")  
  Wscript.Echo "  HOMESHARE = " & venv("HOMESHARE")  
End Sub
camilohe
fuente