45

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

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

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

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

6 ответов6

36

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

Только 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. Добавьте следующее значение реестра Multi-String в 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
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

1

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

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
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 есть проблема с загрузкой профиля, потому что что-то настроено неправильно, он либо создаст новую копию из профиля по умолчанию, либо предоставит вам временную копию для использования в этом сеансе, и вы все равно сможете войти в. Тем не менее, я бы порекомендовал вам использовать другую учетную запись администратора для использования в системе на случай, если что-то пойдет не так.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .