Überschreiben von HOMEDRIVE und HOMEPATH als Windows 7-Benutzer


49

Mein Arbeitgeber verfügt über eine Active Directory-Gruppenrichtlinie, die mein Windows 7-Notebook HOMEDRIVE auf "M:" (ein zugeordnetes Netzlaufwerk) und mein HOMEPATH auf "\" setzt. Da ich nur Leseberechtigungen für das Stammverzeichnis dieses freigegebenen Laufwerks habe, kann ich in meinem Windows-Basisverzeichnis keine Dateien oder Verzeichnisse erstellen. Meine Versuche, mit der IT-Abteilung zusammenzuarbeiten, waren erfolglos.

Gibt es eine Möglichkeit für mich , um global diese Umgebungs - Variablen beim Booten oder Login - Zeit zu ändern? Ich muss für alle Anwendungen alternative Werte verwenden (z. B. "C:" und "\ Users \ myname"). Ich habe einige Dienstprogramme (wie gvim und andere) installiert, die Einstellungsdateien im Home-Verzeichnis des Benutzers speichern.

WICHTIG : Das Ändern dieser Envars unter "Systemeigenschaften> Umgebungsvariablen" funktioniert nicht . Ich habe versucht, diese als Benutzer- und Systemvariablen festzulegen (einschließlich eines Neustarts). Die Eingabe SET HOMEin ein DOS-Fenster zeigt deutlich, dass meine Einstellungen ignoriert werden. Die Verwendung von "Start in" in einer Windows-Verknüpfung löst dieses Problem ebenfalls nicht , da ich Dinge wie Kontextmenüelemente des Explorers (wie "Mit Vim bearbeiten") benötige, um ordnungsgemäß zu funktionieren.

Ich habe Administratorrechte auf diesem Firmen-Laptop, aber ich bin kein Win7-Guru. Früher hätte ein Boot-Skript dies in einer Minute gelöst. Ist es heute überhaupt möglich? Vielen Dank.


2
Ihre IT-Abteilung hat diese Richtlinien aus einem bestimmten Grund festgelegt. Wenn Sie versucht haben, es mit ihnen auszuarbeiten, und sie sich geweigert haben, es zu ändern, gibt es wahrscheinlich einen guten Grund. Wenn Sie dann weiterhin ihren Rat ignorieren und gegen die von ihnen geforderten Maßnahmen vorgehen, bereiten Sie sich auf Disziplinarmaßnahmen vor, wenn Sie erwischt werden.
Joe Taylor

28
Nach über 30 Jahren in dieser Branche habe ich festgestellt, dass IT-Richtlinien für den durchschnittlichen PC-Benutzer für Entwickler und Power-User häufig unzureichend (oder sogar hinderlich) sind. Die IT-Abteilung musste den Bedürfnissen der Entwickler häufig anders Rechnung tragen. Wenn dies eine weitere solche Lernerfahrung für sie ist, helfe ich gerne weiter. Ich würde gerne einen gültigen Geschäftsgrund dafür hören, dass das Home-Verzeichnis eines Benutzers unbrauchbar wird.
MykennaC

2
Zeigen Sie, dass das Problem für bestimmte Benutzer nicht funktionsfähig ist, und schlagen Sie für diese Benutzer ein separates Gruppenrichtlinienobjekt vor. Ein Umzug auf diese konstruktive Weise funktioniert mit größerer Wahrscheinlichkeit als der Versuch, die Domänenrichtlinien mit Hacks zu umgehen.
Joe Taylor

6
IT hat sich endlich bei mir gemeldet. Sie werden nichts ändern. Ja, die offizielle Firmenrichtlinie sieht vor, dass ein Benutzer-Home-Verzeichnis angegeben wird, in dem keine Dateien erstellt werden dürfen. Windows-Anwendungen, die versuchen, das Standard-Benutzerverzeichnis für Einstellungen zu verwenden, schlagen fehl. Gibt es hier keinen Zauberer, der mir eine Lösung anbieten kann?
MykennaC

3
ja @D0rf, er sollte sich umdrehen und es einfach nehmen. Wenn die IT Ihren Job unmöglich macht, müssen Sie kämpfen und viel Aufhebens machen, bis er geändert wird. Wenn Sie ein passiver Entwickler sind, haben Sie es sich verdient, in einem schrecklichen Unternehmen zu arbeiten, das Ihnen nicht die Werkzeuge zur Verfügung stellt, die Sie für Ihren Job benötigen.
Scott

Antworten:


38

Im Folgenden sind einige Hacks aufgeführt, die ich entwickelt habe. Sie sind nicht elegant, können aber in Ihrer Unternehmensumgebung funktionieren.

Nur HOMEDRIVE

Es scheint, dass viele Anwendungen nur HOMEDRIVE / HOMEPATH verwenden. In diesem Fall können Sie ein Startskript erstellen, das den Basislaufwerksbuchstaben über den Administratorpfad des UNC-Laufwerks Ihrem lokalen Benutzerpfad neu zuordnet:

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

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

HOMEDRIVE Lokale Standardeinstellung

Wenn Sie nicht über den Namen auf "Server" zugreifen müssen, kann die Gruppenrichtlinieneinstellung fehlschlagen und auf Ihren lokalen Computer zurückgreifen. Der einfachste Weg, dies zu tun, besteht darin, einen Eintrag in C: \ Windows \ System32 \ drivers \ etc \ hosts wie folgt hinzuzufügen :

127.0.0.1   Server

Nach dem Neustart sollte Folgendes angezeigt werden:

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

HOMEDRIVE / SHARE mit hybriden lokalen / Remote-UNC-Pfaden

Wenn Sie für einige UNC-Pfade namentlich auf "Server" zugreifen möchten, andere jedoch durch lokale Pfade überschreiben möchten, habe ich den folgenden Gräuel entwickelt. Hinweis: Direkte Serververbindungen zu "Server" werden weiterhin auf Ihrem lokalen Computer aufgelöst. Ich empfehle diese Lösung nur, wenn "Server" nur ein Dateiserver ist:

  1. Ändern Sie C: \ Windows \ System32 \ drivers \ etc \ hosts , um "Server" auf Ihren lokalen Computer umzuleiten:

    127.0.0.1   Server
    
  2. Fügen Sie den folgenden Multi-String - Registrierungswert HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0 Anmeldeinformationen zu ermöglichen , an dem lokalen UNC - Pfad übergeben werden:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\
    BackConnectionHostNames = Server
    
  3. Erstellen Sie ein Dummy-Verzeichnis, das als Stammverzeichnis des Servers dient:

    set DUMMY_LOC=C:\Server_Dummy
    
    mkdir %DUMMY_LOC%
    cd /D %DUMMY_LOC%
    
  4. Für jeden UNC-Pfad, den Sie an den realen Server weiterleiten möchten:

    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. Für jede UNC-Freigabe, die Sie lokal definieren möchten (z. B. Benutzer):

    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. Starten Sie neu

In diesem Beispiel können die folgenden UNC-Pfade aufgelöst werden:

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

Diese Pfadauflösung sollte vor der Laufwerkszuordnung erfolgen. Solange die den Zuordnungen zugeordneten UNC-Pfade gültig sind (lokal oder remote), sollten sich die Laufwerksbuchstaben wie erwartet verhalten.

In meinem Setup werden beispielsweise die folgenden Variablen von der Domäne erzwungen:

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

Aufgrund meiner Zuordnungen ist das Ergebnis jedoch:

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

Diese Vorschläge scheinen zu helfen, WENN ich an der Befehlszeile arbeitete. Um eine App (wie gvim) zu beeinflussen, müsste ich wahrscheinlich einen Wrapper erstellen. Das Durchlaufen aller betroffenen Apps erfordert viel Arbeit, ganz zu schweigen von der Änderung der Dateizuordnungen usw. Das erneute Zuordnen des Laufwerks M: zum Zeitpunkt des Starts ist ein guter Vorschlag Apps / Shells)? Ich hoffe , dass diese Vorschläge , anderen helfen, aber ich glaube nicht , dass meine OP lösen
MykennaC

3
Ich habe diese Methoden schon eine Weile nicht mehr gebraucht, aber ich erinnere mich, sie speziell für gvim entwickelt zu haben, von dem ich glaube, dass es HOMEDRIVE und HOMEPATH verwendete. Diese Methoden erfordern keine Ausführung über die Befehlszeile. Alle Anwendungen, die Variablen oder Laufwerksbuchstaben verwenden, sind davon betroffen. Methode 2 und 3 sind "permanent" und müssen nur einmal ausgeführt werden, damit die Änderungen erhalten bleiben. Methode 1 kann beim Start automatisch ausgeführt werden, indem Sie eine Verknüpfung in C: \ Benutzer \ <Sie> \ AppData \ Roaming \ Microsoft \ Windows \ Startmenü \ Programme \ Start erstellen oder eine Aufgabe im Aufgabenplaner einrichten. Ich hoffe das hilft!
Terrance

@terrance Ahhh, die Schönheit gut gemachter Greuel. LMAO. Vielen Dank für Infos hier - und es gibt TONS hier ...
David I. McIntosh

3

Die beste Lösung, die ich gefunden habe, bestand darin, Variablen beim Anmelden und vorher festzulegen userinit.exe.

Das habe ich getan. Zuerst wurde eine Batch-Datei C:\Windows\System32\userinit.cmdmit erstellt

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

und dann änderte Wert HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinitzu C:\Windows\System32\userinit.cmdin der Registrierung.

Weitere Informationen finden Sie unter: https://technet.microsoft.com/en-us/library/cc939862.aspx


Arbeitete in Win7, aber nicht in Win10.
Ameisen


0

Ich denke, diese Pfade werden automatisch an die Stelle gesetzt, an der sich Ihr Benutzerprofil befindet. Das Home-Laufwerk, auf das Sie sich beziehen, ist der Ort, an dem sich Ihre ntuser.dat- und Anwendungsdaten sowie andere Benutzerprofilordner befinden. Zurück mit NT3.x war das "Benutzerprofil" nur Ihre Benutzerregistrierungsstruktur mit Einstellungen, und Sie konnten für jeden Benutzer einen separaten Stammpfad festlegen. Diese wurden in NT4 als Benutzerprofil mit einem Desktop, meinen Dokumenten, einem Startmenü usw. vereint.

Die Speicherorte aller Profile werden in Registrierungsschlüsseln unter gespeichert

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

Sie finden einige Werte für die speziellen Profile und Unterschlüssel: einen für jedes aktive Profil im System. Sie werden durch die SID des Benutzerkontos eingerichtet, zu dem sie gehören. Der einfachste Weg, Ihren zu finden, wäre, durch jeden einzelnen zu scrollen und nach dem richtigen Pfad (unter dem ProfileImagePathWert) zu suchen . Sie sollten in der Lage sein, diesen Wert in einen beliebigen Pfad zu ändern. Dies wird beim nächsten Anmelden wirksam. Stellen Sie sicher, dass Sie Ihre Dateien zuerst in den neuen Pfad kopieren.

Wenn Sie das Profil von dem Konto verschieben müssen, als das Sie angemeldet sind (dh als MikeC angemeldet sind und Sie versuchen, das Profil für MikeC zu kopieren), wird die Datei ntuser.dat (die Registrierungsstruktur mit HKEY_CURRENT_USER) vom Kernel gesperrt. Sie können die Struktur weiterhin kopieren: Gehen Sie zu regedit, klicken Sie mit der rechten Maustaste auf HKEY_CURRENT_USER, wählen Sie "Exportieren", ändern Sie den Typ in "Registrierungsstrukturdateien" und speichern Sie sie unter dem Namen "ntuser.dat" an Ihrem neuen Speicherort.

Nach meiner Erfahrung erstellt winlogon beim Laden eines Profils aufgrund einer fehlerhaften Einrichtung entweder eine neue Kopie des Standardprofils oder gibt Ihnen eine temporäre Kopie, die Sie für diese Sitzung verwenden können, und Sie können sich trotzdem anmelden Ich würde Ihnen jedoch empfehlen, ein anderes Administrator-Login für das System zu verwenden, falls etwas schief geht.


Nun, das einzige Element in meiner Profilliste, das relevant zu sein scheint, ist ProfileImagePath, das als C: \ Users \ mcepek angezeigt wird. Das passt zu dem, was SET USERPROFILE zeigt, aber das ist hier nicht mein Fokus. Ich muss HOMEPATH und HOMEDRIVE beeinflussen. Aus Spaß durchsuchte ich meine Registrierung nach Elementen mit Werten oder Daten, die auf "M:" gesetzt waren (nur ganze Zeichenfolge abgleichen = aktiviert) und fand nur einen Computer / HKEY_USERS / xxxx / Volatile Environment / HOMEDRIVE. Das Ändern in C: schien in meiner aktuellen Anmeldesitzung keine Auswirkungen zu haben. Nach einem Neustart war der Wert wieder M: (keine Überraschung).
MykennaC


0

Eine etwas einfachere Alternative wäre, das folgende Skript (env-reset.vbs) als geplante Aufgabe bei der Anmeldung auszuführen, zu entsperren und möglicherweise auch alle paar Minuten.

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.