Переопределение HOMEDRIVE и HOMEPATH для пользователя Windows 7

50

У моего работодателя есть групповая политика Active Directory, в которой для моего ноутбука Windows 7 HOMEDRIVE установлено значение «M:» (подключенный сетевой диск), а для моего HOMEPATH - «\». Поскольку у меня есть права только для чтения для корня этого общего диска, я не могу создавать файлы или каталоги в своем домашнем каталоге Windows. Мои попытки работать с ИТ-отделом оказались безуспешными.

Есть ли способ для меня , чтобы глобально изменить эти переменные окружения при загрузке или авторизаций времени? Мне нужно, чтобы все приложения использовали альтернативные значения (например, «C:» и «\ Users \ myname»). У меня есть некоторые установленные утилиты (например, gvim и другие), которые хранят файлы настроек в домашнем каталоге пользователя.

ВАЖНО : Изменение этих параметров в разделе «Свойства системы> Переменные среды» не работает . Я попытался установить их как пользовательские и системные переменные (включая перезагрузку). Печатание SET HOMEв окне DOS ясно показывает, что мои настройки игнорируются. Кроме того, использование «Пуск в» в ярлыке Windows также не решит эту проблему, так как мне нужны такие вещи, как элементы контекстного меню Проводника (например, «Редактировать с помощью Vim») для правильной работы.

У меня есть права администратора на ноутбуке этой компании, но я не гуру Win7. В свое время загрузочный скрипт решил бы это за минуту. Возможно ли это сегодня? Благодарю.

MykennaC
источник
2
Ваш ИТ-отдел установил эти политики по определенной причине. Если вы пытались решить это с ними, и они отказались изменить это, вероятно, есть веская причина. Если вы продолжаете игнорировать их советы и идти против того, что они просили, подготовьтесь к дисциплинарным взысканиям, если вас поймают.
Джо Тейлор
29
За более чем 30 лет работы в этой отрасли я узнал, что ИТ-политика для среднего пользователя ПК часто неадекватна (или даже мешает) разработчикам и опытным пользователям. ИТ-отделам часто приходилось по-разному реагировать на потребности разработчиков, и если для них это еще один такой опыт обучения, то я рад помочь. Мне бы хотелось услышать вескую деловую причину, по которой домашний каталог пользователя стал непригодным для использования.
MykennaC
2
Почему бы не решить проблему, показать, что она не подходит для определенных пользователей, и предложить отдельный объект групповой политики для таких пользователей. Движение таким конструктивным способом с большей вероятностью сработает, чем попытка обойти политики домена с помощью хаков.
Джо Тейлор
6
ЭТО наконец вернулось ко мне. Они не собираются ничего менять. Да, официальная политика компании заключается в предоставлении домашнего каталога пользователя, в котором я не могу создавать файлы. Приложения Windows, которые пытаются использовать домашний каталог пользователя по умолчанию для таких вещей, как файлы настроек, не будут работать. Здесь нет волшебника, который может предложить мне какое-то решение этой проблемы?
MykennaC
3
да @ D0rf, он должен перевернуться и просто взять его. Если ИТ делает вашу работу невозможной, вам нужно бороться и поднимать шум, пока она не изменится. Если вы пассивный разработчик, то вы достойны своей жизни в ужасной компании, которая не дает вам инструментов, необходимых для вашей работы.
Скотт

Ответы:

39

Ниже приведены некоторые хаки, которые я разработал. Они не элегантны, но могут быть функциональными в вашей корпоративной среде.

Только HOMEDRIVE

Кажется, что многие приложения используют только HOMEDRIVE / HOMEPATH. В этом случае вы можете создать сценарий запуска, который сопоставляет букву базового диска с вашим локальным путем через путь администратора диска UNC:

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

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

HOMEDRIVE Локальный по умолчанию

Если вам вообще не нужен доступ к «Серверу» по имени, вы можете вызвать сбой настройки групповой политики и откат к локальной машине. Самый простой способ сделать это - добавить запись в C: \ Windows \ System32 \ drivers \ etc \ hosts, например:

127.0.0.1   Server

После перезагрузки вы должны увидеть что-то вроде:

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

HOMEDRIVE / SHARE с гибридными локальными / удаленными UNC-путями

Если вы хотите получить доступ к «Серверу» по имени для некоторых путей UNC, но переопределить другие локальными путями, я разработал следующую мерзость. Примечание: прямые подключения к серверу по-прежнему будут разрешаться на вашем локальном компьютере. Я рекомендую это решение, только если «Сервер» является только файловым сервером:

  1. Измените C: \ Windows \ System32 \ drivers \ etc \ hosts, чтобы перенаправить «Сервер» на ваш локальный компьютер:

    127.0.0.1   Server
    
  2. Добавьте следующее значение реестра для нескольких строк в HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0, чтобы разрешить передачу учетных данных в локальный путь UNC:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\
    BackConnectionHostNames = Server
    
  3. Создайте фиктивный каталог, который будет служить корнем сервера:

    set DUMMY_LOC=C:\Server_Dummy
    
    mkdir %DUMMY_LOC%
    cd /D %DUMMY_LOC%
    
  4. Для каждого UNC-пути, который вы хотите направить на реальный Сервер:

    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. Для каждого общего ресурса UNC, который вы хотите определить локально (например, Users):

    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. перезагрузка

Например, это позволит разрешить следующие пути UNC:

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

Это разрешение пути должно происходить до сопоставления дисков. Пока пути UNC, связанные с сопоставлениями, действительны (локальные или удаленные), буквы дисков должны вести себя как положено.

Например, в моей настройке следующие переменные принудительно задаются доменом:

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

Но из-за моих отображений результат:

G: => \\Server\Users\username => C:\Users\username
Терренс
источник
Кажется, что эти предложения могут помочь, если бы я работал в командной строке. Чтобы повлиять на приложение (например, gvim), мне, вероятно, нужно создать оболочку. Перебор всех затронутых приложений звучит как большая работа, не говоря уже об изменении сопоставления файлов и т. Д. Переназначение моего диска M: во время загрузки является хорошим предложением, но как это сделать глобально при запуске Windows (чтобы повлиять на все приложения / раковины)? Я надеюсь, что эти предложения помогут другим, но я не думаю, что они решают мою ОП
MykennaC
3
Я давно не нуждался в этих методах, но я вспоминаю, как разрабатывал их специально для gvim, который, я считаю, использовал HOMEDRIVE и HOMEPATH. Эти методы не требуют выполнения из командной строки; все приложения, использующие переменные или букву диска, будут затронуты. Методы № 2 и № 3 являются «постоянными», и их нужно выполнить только один раз, чтобы изменения вступили в силу. Способ № 1 можно автоматически выполнить при запуске, поместив ярлык в C: \ Users \ <You> \ AppData \ Roaming \ Microsoft \ Windows \ Меню Пуск \ Программы \ Запуск, или настроив задачу в планировщике задач. Надеюсь, это поможет!
Терренс
@terrance Аааа, красота хорошо созданных мерзостей. LMAO. Спасибо за информацию здесь - и здесь есть ТОННЫ ...
Дэвид И. Макинтош
3

Лучшее решение, которое я нашел, состояло в том, чтобы установить переменные во время входа и до userinit.exe.

Это то, что я сделал. Сначала создали командный файл, C:\Windows\System32\userinit.cmdсодержащий

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

а затем изменили значение HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinitдля C:\Windows\System32\userinit.cmdв реестре.

Дополнительная информация по адресу: https://technet.microsoft.com/en-us/library/cc939862.aspx

Али Малекпур
источник
Работал в Win7, но не в Win10.
Муравьи
1

Я использовал SETXв сценарии запуска, и это сработало для меня. Смотри мой ответ .

Марк Микофски
источник
0

Я думаю, что эти пути автоматически устанавливаются на место, где находится ваш профиль пользователя. Домашний диск, на который вы ссылаетесь, - это место, где находятся ваши ntuser.dat, данные приложения и другие папки профиля пользователя, верно? Вернувшись к NT3.x, «профиль пользователя» был просто кустом реестра пользователей с настройками, и вы могли установить отдельный домашний путь для каждого пользователя. Они объединены в NT4 в виде профиля пользователя с рабочим столом, моими документами, меню «Пуск» и т. Д.

Расположение всех профилей хранится в разделах реестра под

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

Вы найдете некоторые значения для специальных профилей и подразделов: по одному для каждого активного профиля в системе. Они устанавливаются с помощью SID учетной записи пользователя, которому они принадлежат. Самый простой способ найти ваш - прокрутить каждый, ищущий правильный путь (под ProfileImagePathзначением). Вы должны иметь возможность просто изменить это значение на любой путь, который вы хотите; это вступит в силу при следующем входе в систему. Обязательно сначала скопируйте файлы на новый путь.

Если вам нужно перенести профиль из учетной записи, в которую вы вошли как (т.е. вошли как MikeC и пытаетесь скопировать профиль для MikeC), файл ntuser.dat (содержащий куст реестра HKEY_CURRENT_USER) будет заблокирован ядром. Вы все еще можете скопировать куст: перейдите в regedit, щелкните правой кнопкой мыши HKEY_CURRENT_USER, выберите «Экспорт», измените тип на файлы куста реестра и сохраните как ntuser.dat в новом месте.

По моему опыту, если у winlogon возникла проблема с загрузкой профиля, потому что что-то настроено неправильно, он либо создаст новую копию из профиля по умолчанию, либо предоставит вам временную копию для использования в этом сеансе, и вы все равно сможете войти в. Однако, я бы порекомендовал вам использовать другую учетную запись администратора для использования в системе на случай, если что-то пойдет не так.

Крис Смит
источник
Ну, единственный элемент в моем ProfileList, который кажется актуальным, это ProfileImagePath, который отображается как C: \ Users \ mcepek. Это соответствует тому, что показывает SET USERPROFILE, но это не моя задача. Мне нужно повлиять на HOMEPATH и HOMEDRIVE. Просто для удовольствия я искал в своем реестре элементы со значениями или данными, установленными в «M:» (соответствует только целая строка = проверено), и нашел только компьютер / HKEY_USERS / xxxx / Volatile Environment / HOMEDRIVE. Изменение его на C: похоже, не повлияло на мой текущий сеанс входа в систему. После перезагрузки значение вернулось к M: (не удивительно).
MykennaC
0

Я публикую это на тот случай, если кто-нибудь еще придет к этому вопросу через Google. Вместо того, чтобы сменить мой домашний каталог и заставить парней из IS на меня злиться, я настроил и запустил разработку на виртуальной машине. Microsoft предлагает Widows XP в виртуальном режиме. http://www.microsoft.com/windows/virtual-pc/download.aspx

Кристина Грегори Николс
источник
0

Несколько более простой альтернативой будет запуск приведенного ниже сценария (env-reset.vbs) в качестве запланированной задачи при входе в систему, разблокировке и, возможно, каждые несколько минут.

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
источник