Ghi đè HOMEDRIVE và HOMEPATH với tư cách là người dùng Windows 7


49

Chủ lao động của tôi có chính sách nhóm Active Directory, đặt máy tính xách tay Windows 7 HOMEDRIVE của tôi thành "M:" (ổ đĩa mạng được ánh xạ) và HOMEPATH của tôi thành "\". Vì tôi có quyền chỉ đọc cho thư mục gốc của ổ đĩa chung đó, tôi không thể tạo tệp hoặc thư mục trong thư mục chính của windows. Những nỗ lực của tôi để làm việc với bộ phận CNTT đã không thành công.

Có cách nào cho tôi để trên toàn cầu thay đổi các envars lúc khởi động hay đăng nhập thời gian? Tôi cần cho tất cả các ứng dụng sử dụng các giá trị thay thế (chẳng hạn như "C:" và "\ Users \ myname"). Tôi có một số tiện ích được cài đặt (như gvim và các tiện ích khác) lưu trữ các tệp ưu tiên trong thư mục chính của người dùng.

QUAN TRỌNG : Thay đổi các envars này trong "Thuộc tính hệ thống> Biến môi trường" không hoạt động . Tôi đã thử đặt các biến này thành cả Biến người dùng và Hệ thống (bao gồm cả khởi động lại). Nhập SET HOMEvào cửa sổ DOS cho thấy rõ rằng các cài đặt của tôi bị bỏ qua. Ngoài ra, sử dụng "Bắt đầu" trong một phím tắt Windows cũng sẽ không giải quyết được điều này, vì tôi cần những thứ như các mục menu ngữ cảnh của Explorer (như "Chỉnh sửa bằng Vim") để hoạt động chính xác.

Tôi có quyền quản trị trên máy tính xách tay của công ty này, nhưng tôi không phải là một chuyên gia Win7. Quay lại trong ngày, một kịch bản khởi động sẽ giải quyết điều này trong một phút. Nó thậm chí có thể ngày hôm nay? Cảm ơn.


2
Bộ phận CNTT của bạn đã thiết lập các chính sách này vì một lý do. Nếu bạn đã cố gắng giải quyết nó với họ và họ đã từ chối thay đổi thì có lẽ đó là một lý do chính đáng. Nếu sau đó bạn tiếp tục phớt lờ lời khuyên của họ và đi ngược lại những gì họ đã yêu cầu chuẩn bị cho hành động kỷ luật nếu bạn bị bắt.
Joe Taylor

28
Sau hơn 30 năm trong ngành này, tôi đã biết rằng chính sách CNTT cho người dùng PC trung bình thường không đủ (hoặc thậm chí gây cản trở) cho các nhà phát triển và người dùng quyền lực. CNTT thường phải đáp ứng nhu cầu của các nhà phát triển khác nhau và nếu đây là một trải nghiệm học tập như vậy cho họ ở đây, thì tôi rất vui lòng giúp đỡ. Tôi muốn nghe một lý do kinh doanh hợp lệ để làm cho thư mục nhà của người dùng không thể chấp nhận được.
MykennaC

2
Tại sao không khắc phục được vấn đề, cho thấy nó không khả thi đối với một số người dùng nhất định và đề xuất GPO riêng cho những người dùng như vậy. Di chuyển theo cách xây dựng này có khả năng làm việc cao hơn nhiều so với cố gắng bỏ qua các chính sách tên miền với hack.
Joe Taylor

6
CNTT cuối cùng đã trở lại với tôi. Họ sẽ không thay đổi bất cứ điều gì. Có, chính sách của công ty là cung cấp một thư mục nhà người dùng nơi tôi không được phép tạo tệp. Các ứng dụng Windows cố gắng sử dụng thư mục nhà người dùng mặc định cho những thứ như tệp ưu tiên sẽ không thành công. Không có phù thủy nào ở đây có thể cung cấp cho tôi một số cách giải quyết vấn đề này?
MykennaC

3
vâng @ D0rf, anh ta nên lăn qua và chỉ lấy nó. Nếu CNTT làm cho công việc của bạn không thể, bạn cần phải chiến đấu và gây ồn ào cho đến khi nó được thay đổi. Nếu bạn là một nhà phát triển thụ động, thì bạn xứng đáng có được cuộc sống của mình tại một công ty tồi tệ không cung cấp cho bạn các công cụ bạn cần cho công việc của mình.
Scott

Câu trả lời:


38

Dưới đây là một số hack tôi đã phát triển. Chúng không thanh lịch, nhưng có thể hoạt động trong môi trường công ty của bạn.

Chỉ có ở nhà

Có vẻ như nhiều ứng dụng chỉ sử dụng HOMEDRIVE / HOMEPATH. Trong trường hợp đó, bạn có thể tạo tập lệnh khởi động để ánh xạ lại ký tự ổ đĩa cơ sở cho đường dẫn người dùng cục bộ của bạn thông qua đường dẫn quản trị viên ổ đĩa UNC:

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

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

Mặc định cục bộ

Nếu bạn hoàn toàn không cần truy cập "Máy chủ", bạn có thể khiến cài đặt chính sách nhóm không thành công và quay trở lại máy cục bộ của bạn. Cách dễ nhất để làm điều này là thêm một mục vào C: \ Windows \ System32 \ driver \ etc \ hosts như:

127.0.0.1   Server

Sau khi khởi động lại, bạn sẽ thấy một cái gì đó như:

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

HOMEDRIVE / SHARE với các đường dẫn UNC cục bộ / từ xa

Nếu bạn muốn truy cập vào "Máy chủ" theo tên cho một số đường dẫn UNC, nhưng ghi đè lên các đường dẫn khác bằng đường dẫn cục bộ, tôi đã phát triển cách ghê tởm sau đây. Lưu ý: kết nối máy chủ trực tiếp đến "Máy chủ" vẫn sẽ giải quyết với máy cục bộ của bạn. Tôi chỉ đề xuất giải pháp này nếu "Máy chủ" chỉ là máy chủ tệp:

  1. Sửa đổi C: \ Windows \ System32 \ driver \ etc \ hosts để chuyển hướng "Máy chủ" sang máy cục bộ của bạn:

    127.0.0.1   Server
    
  2. Thêm giá trị đăng ký Đa chuỗi sau đây vào HKEY_LOCAL_MACHINE \ HỆ THỐNG \ CurrentControlset \ Control \ Lsa \ MSV1_0 để cho phép thông tin đăng nhập được chuyển đến đường dẫn UNC cục bộ:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\
    BackConnectionHostNames = Server
    
  3. Tạo một thư mục giả sẽ đóng vai trò là thư mục gốc của Máy chủ:

    set DUMMY_LOC=C:\Server_Dummy
    
    mkdir %DUMMY_LOC%
    cd /D %DUMMY_LOC%
    
  4. Đối với mỗi đường dẫn UNC bạn muốn hướng đến Máy chủ thực:

    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. Đối với mỗi chia sẻ UNC bạn muốn xác định cục bộ (chẳng hạn như Người dùng):

    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. Khởi động lại

Ví dụ, điều này sẽ cho phép các đường dẫn UNC sau được giải quyết:

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

Độ phân giải đường dẫn này phải xảy ra trước khi ánh xạ ổ đĩa. Miễn là các đường dẫn UNC được liên kết với ánh xạ là hợp lệ (có thể là cục bộ hoặc từ xa), các ký tự ổ đĩa sẽ hoạt động như mong đợi.

Ví dụ: trong thiết lập của tôi, các biến sau đây bị ép buộc bởi tên miền:

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

Nhưng do ánh xạ của tôi, kết quả là:

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

Những đề xuất này có vẻ như có thể giúp NẾU tôi đang làm việc ở dòng lệnh. Để ảnh hưởng đến một ứng dụng (như gvim) có lẽ tôi sẽ cần phải tạo một trình bao bọc. Lặp lại tất cả các ứng dụng bị ảnh hưởng nghe có vẻ như rất nhiều công việc, chưa kể đến việc thay đổi liên kết tệp, v.v. Nhắc lại ổ đĩa M: của tôi khi khởi động là một gợi ý hay, nhưng làm thế nào để làm điều đó trên toàn cầu khi Windows khởi động (để ảnh hưởng đến tất cả ứng dụng / shell)? Tôi hy vọng những đề xuất này sẽ giúp ích cho những người khác, nhưng tôi không nghĩ họ giải quyết được OP của tôi
MykennaC

3
Tôi đã không cần các phương pháp này trong một thời gian, nhưng tôi nhớ rằng việc phát triển chúng đặc biệt cho gvim, mà tôi tin rằng đang sử dụng HOMEDRIVE và HOMEPATH. Các phương thức này không yêu cầu bạn thực thi từ dòng lệnh; mọi ứng dụng sử dụng biến hoặc ký tự ổ đĩa đều sẽ bị ảnh hưởng. Phương pháp # 2 và # 3 là "vĩnh viễn" và chỉ cần được thực hiện một lần để các thay đổi được thực hiện. Phương pháp # 1 có thể được thực thi tự động khi khởi động bằng cách đặt lối tắt trong C: \ Users \ <You> \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup hoặc thiết lập tác vụ trong Trình lập lịch tác vụ. Tôi hi vọng cái này giúp được!
Terrance

@terrance Ahhh, vẻ đẹp của sự gớm ghiếc được chế tạo tốt. CƯỜI RỚT MÔNG. Cảm ơn thông tin ở đây - và có TẤN ở đây ...
David I. McIntosh

3

Giải pháp tốt nhất tôi tìm thấy là đặt các biến trong khi đăng nhập và trước đó userinit.exe.

Đây là những gì tôi đã làm. Đầu tiên tạo ra một tập tin thực thi tại C:\Windows\System32\userinit.cmdchứa

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

và sau đó thay đổi giá trị của HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinitđể C:\Windows\System32\userinit.cmdtrong registry.

Thêm thông tin tại: https://technet.microsoft.com/en-us/l Library / cc939862.aspx


Hoạt động trong Win7, nhưng không hoạt động trong Win10.
Kiến


0

Tôi nghĩ những đường dẫn này sẽ tự động được đặt ở vị trí có hồ sơ người dùng của bạn. Ổ đĩa gia đình mà bạn đang đề cập đến là nơi chứa ntuser.dat và dữ liệu ứng dụng và các thư mục hồ sơ người dùng khác, đúng không? Quay lại với NT3.x, "hồ sơ người dùng" chỉ là mục đăng ký người dùng của bạn với các cài đặt và bạn có thể đặt đường dẫn nhà riêng cho mỗi người dùng. Những người đã thống nhất với nhau trong NT4 như một hồ sơ người dùng với máy tính để bàn, tài liệu của tôi, menu bắt đầu, v.v.

Vị trí của tất cả các cấu hình được lưu trữ trong khóa đăng ký bên dưới

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

Bạn sẽ tìm thấy một số giá trị cho các cấu hình đặc biệt và các khóa con: một cho mỗi cấu hình hoạt động trên hệ thống. Chúng được thiết lập bởi SID của tài khoản người dùng mà chúng thuộc về. Cách dễ nhất để tìm thấy bạn sẽ là cuộn qua từng người để tìm đúng đường dẫn (dưới ProfileImagePathgiá trị). Bạn có thể chỉ cần thay đổi giá trị đó thành bất kỳ con đường nào bạn muốn; nó sẽ có hiệu lực vào lần tiếp theo bạn đăng nhập. Hãy chắc chắn sao chép các tập tin của bạn vào đường dẫn mới đầu tiên.

Nếu bạn phải di chuyển hồ sơ từ tài khoản mà bạn đã đăng nhập (tức là đã đăng nhập với tên MikeC và bạn đang cố sao chép hồ sơ cho MikeC), tệp ntuser.dat (hive đăng ký có chứa HKEY_CURRENT_USER) sẽ bị khóa bởi kernel. Bạn vẫn có thể sao chép tổ ong: vào regedit, nhấp chuột phải vào HKEY_CURRENT_USER, chọn xuất, thay đổi loại thành tệp hive đăng ký và lưu dưới dạng ntuser.dat tại vị trí mới của bạn.

Theo kinh nghiệm của tôi, nếu winlogon gặp sự cố khi tải một hồ sơ vì có gì đó được thiết lập sai, nó sẽ tạo một bản sao mới từ hồ sơ mặc định hoặc cung cấp cho bạn một bản sao tạm thời để sử dụng cho phiên đó và bạn vẫn có thể đăng nhập Tuy nhiên, tôi khuyên bạn nên đăng nhập quản trị viên khác để sử dụng trên hệ thống trong trường hợp có sự cố.


Chà, mục duy nhất trong Danh sách hồ sơ của tôi có vẻ phù hợp là ProfileImagePath, hiển thị dưới dạng C: \ Users \ mcepek. Điều đó phù hợp với những gì SET USERPROFILE chỉ cho tôi, nhưng đó không phải là trọng tâm của tôi ở đây. Tôi cần phải ảnh hưởng đến HOMEPATH và HOMEDRIVE. Để giải trí, tôi đã tìm kiếm sổ đăng ký của mình cho các mục có giá trị hoặc dữ liệu được đặt thành "M:" (chỉ khớp toàn bộ chuỗi = đã chọn) và chỉ xuất hiện với Máy tính / HKEY_USERS / xxxx / Môi trường dễ bay hơi / HOMEDRIVE. Thay đổi nó thành C: dường như không có bất kỳ ảnh hưởng nào trong phiên đăng nhập hiện tại của tôi. Sau khi khởi động lại, giá trị đã trở lại M: (không có gì bất ngờ).
MykennaC


0

Một cách khác dễ dàng hơn là chạy tập lệnh bên dưới (env-reset.vbs) như một tác vụ theo lịch trình khi đăng nhập, mở khóa và có thể cứ sau vài phút.

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.