Sostituzione di HOMEDRIVE e HOMEPATH come utente di Windows 7


50

Il mio datore di lavoro ha una politica di gruppo di Active Directory che imposta il mio laptop Windows 7 HOMEDRIVE su "M:" (un'unità di rete mappata) e il mio HOMEPATH su "\". Dato che ho i permessi di sola lettura per la radice di quell'unità condivisa, non riesco a creare file o directory nella mia directory home di Windows. I miei tentativi di lavorare con il dipartimento IT non hanno avuto successo.

C'è un modo per me di cambiare globalmente questi dintorni all'avvio o al momento del login? Ho bisogno che tutte le applicazioni utilizzino valori alternativi (come "C:" e "\ Users \ myname"). Ho alcune utility installate (come gvim e altre) che memorizzano i file delle preferenze nella home directory dell'utente.

IMPORTANTE : la modifica di questi indirizzi in "Proprietà del sistema> Variabili d'ambiente" non funziona . Ho provato a impostarli come variabili utente e di sistema (incluso un riavvio). Digitare SET HOMEin una finestra DOS mostra chiaramente che le mie impostazioni vengono ignorate. Inoltre, l'uso di "Avvia in" in un collegamento di Windows non risolverà questo problema, poiché ho bisogno di elementi come le voci del menu di scelta rapida di Explorer (come "Modifica con Vim") per funzionare correttamente.

Ho i diritti di amministratore su questo laptop aziendale, ma non sono un guru di Win7. In passato, uno script di avvio lo avrebbe risolto in un minuto. È possibile anche oggi? Grazie.


2
Il reparto IT ha impostato questi criteri per un motivo. Se hai provato a risolverlo con loro e hanno rifiutato di cambiarlo, probabilmente c'è una buona ragione. Se poi continui a ignorare i loro consigli e vai contro quello che ti hanno chiesto, preparati ad agire in modo disciplinare se verrai preso.
Joe Taylor,

29
Dopo oltre 30 anni in questo settore, ho imparato che la politica IT per l'utente medio del PC è spesso inadeguata (o addirittura ostruttiva) per gli sviluppatori e gli utenti esperti. L'IT ha spesso dovuto soddisfare le esigenze degli sviluppatori in modo diverso, e se questa è un'altra esperienza di apprendimento per loro qui, allora sono felice di aiutarti. Mi piacerebbe sentire un valido motivo commerciale per rendere inutilizzabile la home directory di un utente.
MykennaC

2
Il motivo per cui non eliminare il problema, dimostrare che non è realizzabile per determinati utenti e proporre un oggetto Criteri di gruppo separato per tali utenti. Muoversi in questo modo costruttivo ha molte più probabilità di funzionare rispetto al tentativo di aggirare le politiche del dominio con gli hack.
Joe Taylor,

6
Finalmente è tornato da me. Non cambieranno nulla. Sì, la politica aziendale ufficiale prevede di fornire una home directory dell'utente in cui non mi è permesso creare file. Le applicazioni Windows che tentano di utilizzare la home directory dell'utente predefinita per cose come i file delle preferenze non funzioneranno. Non esiste un mago qui che possa offrirmi qualche soluzione alternativa a questo?
MykennaC,

3
sì @ D0rf, dovrebbe rotolare e prenderlo. Se l'IT rende impossibile il tuo lavoro, devi combattere e fare storie fino a quando non viene modificato. Se sei uno sviluppatore passivo, ti meriti la vita in un'azienda terribile che non ti fornisce gli strumenti di cui hai bisogno per il tuo lavoro.
Scott,

Risposte:


38

Di seguito sono riportati alcuni hack che ho sviluppato. Non sono eleganti, ma possono essere funzionali nel tuo ambiente aziendale.

Solo HOMEDRIVE

Sembra che molte applicazioni utilizzino solo HOMEDRIVE / HOMEPATH. In tal caso, è possibile creare uno script di avvio che rimappa la lettera dell'unità di base sul percorso dell'utente locale tramite il percorso di amministrazione dell'unità UNC:

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

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

HOMEDRIVE Default locale

Se non è necessario accedere a "Server" per nome, è possibile che le impostazioni dei criteri di gruppo non vadano a buon fine e ricadano sul computer locale. Il modo più semplice per farlo è aggiungere una voce a C: \ Windows \ System32 \ drivers \ etc \ hosts come:

127.0.0.1   Server

Dopo il riavvio, dovresti vedere qualcosa di simile:

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

HOMEDRIVE / SHARE con percorsi UNC ibridi locali / remoti

Se vuoi accedere a "Server" per nome per alcuni percorsi UNC, ma sostituisci altri con percorsi locali, ho sviluppato il seguente abominio. Nota: le connessioni dirette al server "Server" verranno comunque risolte sul computer locale. Consiglio questa soluzione solo se "Server" è solo un file server:

  1. Modifica C: \ Windows \ System32 \ drivers \ etc \ hosts per reindirizzare "Server" sul tuo computer locale:

    127.0.0.1   Server
    
  2. Aggiungere il seguente valore del Registro di sistema a più stringhe a HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0 per consentire il passaggio delle credenziali al percorso UNC locale:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\
    BackConnectionHostNames = Server
    
  3. Creare una directory fittizia che fungerà da root del server:

    set DUMMY_LOC=C:\Server_Dummy
    
    mkdir %DUMMY_LOC%
    cd /D %DUMMY_LOC%
    
  4. Per ogni percorso UNC che si desidera indirizzare al server reale:

    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. Per ogni condivisione UNC che si desidera definire localmente (come Utenti):

    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. Reboot

Per l'esempio, ciò consentirebbe di risolvere i seguenti percorsi UNC:

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

Questa risoluzione del percorso dovrebbe verificarsi prima dei mapping delle unità. Finché i percorsi UNC associati alle mappature sono validi (siano essi locali o remoti), le lettere di unità dovrebbero comportarsi come previsto.

Ad esempio, nella mia configurazione le seguenti variabili sono forzate dal dominio:

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

Ma a causa delle mie mappature, il risultato è:

G: => \\Server\Users\username => C:\Users\username

Questi suggerimenti sembrano essere di aiuto se stavo lavorando dalla riga di comando. Per influenzare un'app (come gvim) probabilmente avrei bisogno di creare un wrapper. L'iterazione su tutte le app interessate sembra un sacco di lavoro, per non parlare del cambiamento delle associazioni di file, ecc. Rimappare il mio M: drive all'avvio è un buon suggerimento, ma come farlo globalmente all'avvio di Windows (per influenzare tutto apps / shells)? Spero che questi suggerimenti possano aiutare gli altri, ma non credo che risolvano il mio PO
MykennaC

3
Non ho bisogno di questi metodi per un po ', ma ricordo di averli sviluppati appositamente per gvim, che credo stesse usando HOMEDRIVE e HOMEPATH. Questi metodi non richiedono l'esecuzione dalla riga di comando; tutte le applicazioni che utilizzano le variabili o la lettera di unità saranno tutte interessate. I metodi n. 2 e n. 3 sono "permanenti" e devono essere eseguiti una sola volta affinché le modifiche siano valide. Il metodo n. 1 può essere eseguito automaticamente all'avvio inserendo un collegamento in C: \ Users \ <You> \ AppData \ Roaming \ Microsoft \ Windows \ Menu di avvio \ Programmi \ Avvio o impostando un'attività in Utilità di pianificazione. Spero che questo possa essere d'aiuto!
Terrance

@terrance Ahhh, la bellezza di abominazioni ben realizzate. LMAO. Grazie per le informazioni qui - e ci sono tonnellate qui ...
David I. McIntosh,

3

Soluzione migliore che ho trovato è stato quello di variabili set durante il login e prima userinit.exe.

Questo è quello che ho fatto. In primo luogo creato un file batch a C:\Windows\System32\userinit.cmdcontenere

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

e quindi ha cambiato il valore di HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinitto C:\Windows\System32\userinit.cmdnel registro.

Maggiori informazioni su: https://technet.microsoft.com/en-us/library/cc939862.aspx


Ha funzionato in Win7, ma non in Win10.
Formiche


0

Penso che questi percorsi vengano automaticamente impostati sul luogo in cui si trova il tuo profilo utente. L'unità principale a cui ti riferisci è il luogo in cui sono i tuoi dati ntuser.dat e delle applicazioni e le altre cartelle del profilo utente, corrette? Indietro con NT3.x, il "profilo utente" era solo l'hive del registro utenti con le impostazioni e si poteva impostare un percorso home separato per ciascun utente. Quelli sono stati unificati insieme in NT4 come profilo utente con un desktop, i miei documenti, il menu di avvio, ecc.

Le posizioni di tutti i profili sono memorizzate nelle chiavi di registro in

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

Troverai alcuni valori per i profili speciali e le sottochiavi: uno per ciascun profilo attivo sul sistema. Sono impostati dal SID dell'account utente a cui appartengono. Il modo più semplice per trovare il tuo sarebbe quello di scorrere ciascuno cercando il percorso giusto (sotto il ProfileImagePathvalore). Dovresti essere in grado di cambiare quel valore in qualunque percorso tu voglia; avrà effetto al prossimo accesso. Assicurati di copiare prima i tuoi file nel nuovo percorso.

Se devi spostare il profilo dall'account con cui hai effettuato l'accesso (ovvero aver effettuato l'accesso come MikeC e stai provando a copiare il profilo per MikeC) il file ntuser.dat (l'hive del registro contenente HKEY_CURRENT_USER) verrà bloccato dal kernel. Puoi ancora copiare l'alveare: vai su regedit, fai clic con il pulsante destro del mouse HKEY_CURRENT_USER, seleziona esporta, modifica il tipo in file hive del registro e salva come ntuser.dat nella nuova posizione.

Nella mia esperienza, se winlogon ha un problema nel caricare un profilo perché qualcosa è impostato in modo errato, creerà una nuova copia dal profilo predefinito o ti darà una copia temporanea da utilizzare per quella sessione e sarai comunque in grado di accedere Tuttavia, ti consiglio di disporre di un accesso di amministratore diverso da utilizzare sul sistema nel caso in cui qualcosa vada storto.


Bene, l'unico elemento nel mio ProfileList che sembra rilevante è ProfileImagePath, che mostra come C: \ Users \ mcepek. Questo corrisponde a ciò che SET USERPROFILE mi mostra, ma non è questo il mio obiettivo qui. Devo influenzare HOMEPATH e HOMEDRIVE. Solo per divertimento ho cercato nel mio registro elementi con valori o dati impostati su "M:" (confronta solo la stringa intera = selezionata) e ho trovato solo un Computer / HKEY_USERS / xxxx / Volatile Environment / HOMEDRIVE. Modificandolo in C: non sembra avere alcun effetto nella mia sessione di accesso corrente. Dopo un riavvio il valore è tornato a M: (non è una sorpresa).
MykennaC


0

Un'alternativa un po 'più semplice sarebbe quella di eseguire lo script seguente (env-reset.vbs) come attività pianificata all'accesso, sbloccare e forse anche ogni pochi minuti.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.