Переваги HOMEDRIVE та HOMEPATH як користувача Windows 7


49

Мій роботодавець має групову політику Active Directory, яка встановлює для мого ноутбука Windows 7 HOMEDRIVE значення "M:" (картографічний мережевий диск), а мій HOMEPATH - на "\". Оскільки я маю дозволи лише для читання для кореня цього спільного диска, я не можу створювати файли чи каталоги у своєму домашньому каталозі Windows. Мої спроби співпраці з ІТ-відділом були безуспішними.

Чи є спосіб для мене , щоб глобально змінити ці змінні оточення при завантаженні або авторизаций часу? Мені потрібно, щоб усі програми використовували альтернативні значення (наприклад, "C:" та "\ Users \ myname"). У мене є деякі встановлені утиліти (наприклад, gvim та інші), які зберігають файли уподобань у домашній каталог користувача.

ВАЖЛИВО : Зміна цих envavers у розділі "Властивості системи> Змінні середовища" не працює . Я спробував встановити ці як Змінні користувача та Системні (включаючи перезавантаження). Введення SET HOMEу вікно DOS чітко показує, що мої налаштування ігноруються. Також використання "Почати в" у ярлику Windows також не вирішить це, оскільки для коректної роботи мені потрібні такі елементи, як пункти контекстного меню Провідника (наприклад, "Редагувати з Vim").

У мене є права адміністратора на цей ноутбук компанії, але я не є гуру Win7. Ще в той день сценарій завантаження вирішив би це за хвилину. Це можливо навіть сьогодні? Дякую.


2
Ваш ІТ-відділ встановив ці правила не просто так. Якщо ви намагалися розібратися з ними, і вони відмовилися змінити це, мабуть, є вагома причина. Якщо ви продовжуєте ігнорувати їхні поради та йдете проти того, що вони просили, підготуйтеся до дисциплінарного стягнення, якщо вас спіймають.
Джо Тейлор

28
Після більш ніж 30 років роботи в цій галузі я дізнався, що ІТ-політика для пересічного користувача ПК часто є недостатньою (або навіть обструктивною) для розробників та енергетичних користувачів. ІТ часто доводиться по-різному задовольняти потреби розробників, і якщо це ще один такий досвід навчання для них, то я радий допомогти. Я хотів би почути вагому ділову причину, щоб зробити домашній каталог користувача непридатним.
MykennaC

2
Чому б не вирішити проблему, покажіть, що вона не є працездатною для певних користувачів та запропонуйте окрему групову групу для таких користувачів. Перехід таким конструктивним способом набагато частіше спрацює, ніж намагатися обійти доменну політику хаками.
Джо Тейлор

6
Це нарешті мені повернулося. Вони нічого не збираються міняти. Так, офіційна політика компанії - це надання домашнього каталогу користувача, де мені не дозволяється створювати файли. Програми Windows, які намагаються використовувати домашній каталог користувача за замовчуванням для таких речей, як файли налаштувань, не зможуть. Чи немає тут майстра, який може запропонувати мені щось вирішити?
MykennaC

3
так @ D0rf, він повинен перекинутися і просто взяти його. Якщо ІТ робить вашу роботу неможливою, вам потрібно боротися і піднімати суєту, поки вона не зміниться. Якщо ви пасивний розробник, то ви заслуговуєте на свою долю в житті в жахливій компанії, яка не дає вам необхідних інструментів для вашої роботи.
Скотт

Відповіді:


38

Нижче наведено декілька хак, які я розробив. Вони не елегантні, але можуть бути функціональними у вашому корпоративному середовищі.

ТОЛЬКИ ДОМАШНІЙ

Здається, що багато додатків використовують лише 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 \ driver \ etc \ hosts, як:

127.0.0.1   Server

Після перезавантаження ви повинні побачити щось на кшталт:

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

HOMEDRIVE / ПОДІЛИТИСЯ з гібридними локальними / віддаленими UNC-трасами

Якщо ви хочете отримати доступ до "Сервера" за назвою для деяких контурів UNC, але замінити інші місцевими шляхами, я розробив наступну мерзоту. Примітка: прямі підключення сервера до "Сервера" все ще вирішаться для вашої локальної машини. Я рекомендую це рішення лише в тому випадку, якщо "Сервер" - це лише файловий сервер:

  1. Змініть C: \ Windows \ System32 \ драйвери \ тощо \ господарі, щоб перенаправити "Сервер" на вашу локальну машину:

    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, яку ви хочете визначити локально (наприклад, користувачів):

    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: \ Користувачі \ <You> \ AppData \ Роумінг \ Microsoft \ Windows \ Меню "Пуск" \ "Програми \ Запуск" або встановивши завдання в "Планувальник завдань". Я сподіваюся, що це допомагає!
Терранс

@terrance Ahhh, краса добре опрацьованих мерзот. ЛМАО. Дякуємо за інформацію тут - а тут є ТОНС ...
Девід І. Макінтош

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.
Мурашки


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 виникає проблема з завантаженням профілю, оскільки щось налаштовано неправильно, він створить нову копію з профілю за замовчуванням або надасть вам тимчасову копію для використання на цьому сеансі, і ви все одно зможете ввійти дюйм. Однак я рекомендую вам мати інший вхід для адміністрування для використання в системі, якщо щось піде не так.


Ну, єдиний елемент у моєму профілі списку, який видається релевантним, це ProfileImagePath, який відображається як C: \ Users \ mcepek. Це відповідає тому, що мені показує SET USERPROFILE, але тут я не зосереджена на цьому. Мені потрібно впливати на ГОМЕПАТУ та ГОМЕДРИВУ. Для задоволення я шукав у своєму реєстрі елементи з значеннями або даними, встановленими на "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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.