web-dev-qa-db-fra.com

Ignorer HOMEDRIVE et HOMEPATH en tant qu'utilisateur Windows 7

Mon employeur a une stratégie de groupe Active Directory qui définit mon ordinateur portable Windows 7 HOMEDRIVE sur "M:" (un lecteur réseau mappé) et mon HOMEPATH sur "\". Étant donné que je dispose d'autorisations en lecture seule pour la racine de ce lecteur partagé, je ne peux pas créer de fichiers ni de répertoires dans mon répertoire personnel Windows. Mes tentatives de collaboration avec le service informatique ont été infructueuses.

Y at-il un moyen pour me de globalement changer ces envars au démarrage ou temps de connexion? J'ai besoin de toutes les applications pour utiliser des valeurs alternatives (telles que "C:" et "\ Utilisateurs\nom \"). J'ai quelques utilitaires installés (comme gvim et autres) qui stockent les fichiers de préférences dans le répertoire personnel de l'utilisateur.

IMPORTANT: Changer ces paramètres sous "Propriétés système> Variables d'environnement" ne fonctionne pas . J'ai essayé de les définir en tant que variables utilisateur et système (y compris un redémarrage). TaperSET HOME dans une fenêtre DOS montre clairement que mes paramètres sont ignorés. En outre, l'utilisation de "Démarrer dans" dans un raccourci Windows aura également pas , car j'ai besoin de des éléments tels que les éléments du menu contextuel de l'Explorateur (comme "Éditer avec Vim") fonctionnent correctement.

J'ai des droits d'administrateur sur l'ordinateur portable de cette société, mais je ne suis pas un gourou de Win7. De retour dans la journée, un script de démarrage aurait résolu ce problème en une minute. Est-ce même possible aujourd'hui? Merci.

47
MykennaC

Ci-dessous quelques astuces que j'ai développées. Ils ne sont pas élégants, mais peuvent être fonctionnels dans votre environnement d'entreprise.

HOMEDRIVE seulement

Il semble que de nombreuses applications utilisent uniquement HOMEDRIVE/HOMEPATH. Dans ce cas, vous pouvez créer un script de démarrage qui réaffecte la lettre du lecteur de base à votre chemin d'utilisateur local via le chemin d'administration du lecteur UNC:

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

Net Use g: /delete
Net Use g: \\localhost\C$\Users\username

HOMEDRIVE Local Default

Si vous n'avez pas du tout besoin d'accéder à "Serveur" par son nom, vous pouvez provoquer l'échec du paramètre de stratégie de groupe et son retour sur votre ordinateur local. Le moyen le plus simple consiste à ajouter une entrée dans C:\Windows\System32\drivers\etc\hosts comme:

127.0.0.1   Server

Après le redémarrage, vous devriez voir quelque chose comme:

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

HOMEDRIVE/SHARE avec des chemins UNC hybrides locaux/distants

Si vous souhaitez accéder à "Serveur" par nom pour certains chemins UNC, mais en substituer d'autres aux chemins locaux, j'ai développé l'abomination suivante. Remarque: les connexions de serveur directes vers "Serveur" seront toujours résolues sur votre ordinateur local. Je recommande cette solution uniquement si "Serveur" est uniquement un serveur de fichiers:

  1. Modifiez C:\Windows\System32\drivers\etc\hosts pour rediriger le "Serveur" vers votre ordinateur local:

    127.0.0.1   Server
    
  2. Ajoutez la valeur de Registre suivante Multi-String à HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0 pour permettre aux informations d'identification d'être transmises au chemin UNC local:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\
    BackConnectionHostNames = Server
    
  3. Créez un répertoire factice qui servira de racine du serveur:

    set DUMMY_LOC=C:\Server_Dummy
    
    mkdir %DUMMY_LOC%
    cd /D %DUMMY_LOC%
    
  4. Pour chaque chemin UNC que vous souhaitez diriger vers le vrai serveur:

    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. Pour chaque partage UNC que vous souhaitez définir localement (par exemple, Utilisateurs):

    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. Redémarrage

Pour l'exemple, cela permettrait de résoudre les chemins UNC suivants:

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

Cette résolution de chemin doit avoir lieu avant les mappages de lecteurs. Tant que les chemins UNC associés aux mappages sont valides (qu'ils soient locaux ou distants), les lettres de lecteur doivent se comporter comme prévu.

Par exemple, dans ma configuration, les variables suivantes sont forcées par le domaine:

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

Mais à cause de mes correspondances, le résultat est:

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

La meilleure solution que j'ai trouvée consistait à définir des variables lors de la connexion et avant le userinit.exe.

C'est ce que j'ai fait. D'abord créé un fichier de commandes à C:\Windows\System32\userinit.cmd contenant

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

et ensuite changé la valeur de HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit à C:\Windows\System32\userinit.cmd dans le registre.

Plus d'informations sur: https://technet.Microsoft.com/en-us/library/cc939862.aspx

3
Ali Malekpour

J'ai utilisé SETX dans un script de démarrage et cela a fonctionné pour moi. Voir ma réponse .

1
Mark Mikofski

Je publie ceci au cas où quelqu'un d'autre viendrait à cette question via google. Au lieu de changer mon répertoire personnel et de me mettre en colère contre les IS, j'ai configuré et exécuté mon développement sur une machine virtuelle. Microsoft offre à Widows XP en mode virtuel. http://www.Microsoft.com/windows/virtual-pc/download.aspx

Une alternative un peu plus simple serait d'exécuter le script ci-dessous (env-reset.vbs) en tant que tâche planifiée à l'ouverture de session, le déverrouillage et peut-être toutes les quelques minutes également.

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
0
camilohe

Je pense que ces chemins sont automatiquement définis à l'endroit où se trouve votre profil d'utilisateur. Le lecteur d’accueil auquel vous faites référence est l’endroit où se trouvent votre ntuser.dat, vos données d’application et d’autres dossiers de profils d’utilisateur, correct? De retour avec NT3.x, le "profil utilisateur" était simplement votre registre d'utilisateurs Hive avec des paramètres et vous pouviez définir un chemin de base distinct pour chaque utilisateur. Ceux-ci ont été unifiés dans NT4 en tant que profil utilisateur avec un bureau, mes documents, un menu Démarrer, etc.

Les emplacements de tous les profils sont stockés dans des clés de registre sous

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

Vous trouverez des valeurs pour les profils spéciaux et des sous-clés: une pour chaque profil actif du système. Ils sont configurés par le SID du compte d'utilisateur auquel ils appartiennent. Le moyen le plus simple de trouver le vôtre serait de faire défiler chacun d'eux à la recherche du bon chemin (sous la valeur ProfileImagePath). Vous devriez pouvoir changer cette valeur en choisissant le chemin que vous voulez; cela prendra effet la prochaine fois que vous vous connecterez. Veillez à copier d'abord vos fichiers dans le nouveau chemin.

Si vous devez déplacer le profil du compte sur lequel vous êtes connecté (c'est-à-dire connecté en tant que MikeC et que vous essayez de copier le profil pour MikeC), le fichier ntuser.dat (la ruche de registre contenant HKEY_CURRENT_USER) sera verrouillé par le noyau. . Vous pouvez toujours copier le Hive: allez dans regedit, faites un clic droit sur HKEY_CURRENT_USER, sélectionnez exporter, changer le type en registre Hive fileset enregistrez-le sous le nom ntuser.dat à votre nouvel emplacement.

D'après mon expérience, si winlogon rencontre un problème lors du chargement d'un profil suite à une configuration incorrecte, il crée une nouvelle copie à partir du profil par défaut ou vous en fournit une copie temporaire à utiliser pour cette session. Vous pourrez toujours vous connecter. Cependant, je vous recommanderais d’utiliser un autre identifiant d’administrateur à utiliser sur le système en cas de problème.

0
Chris Smith