Mengesampingkan HOMEDRIVE dan HOMEPATH sebagai pengguna Windows 7


50

Majikan saya memiliki kebijakan grup Direktori Aktif yang menetapkan laptop Windows 7 HOMEDRIVE saya menjadi "M:" (drive jaringan yang dipetakan) dan HOMEPATH saya menjadi "\". Karena saya memiliki izin baca-saja untuk root dari drive yang dibagikan itu, saya tidak dapat membuat file atau direktori di direktori home windows saya. Upaya saya untuk bekerja dengan departemen TI tidak berhasil.

Apakah ada cara bagi saya untuk secara global mengubah para envars ini saat boot atau login? Saya membutuhkan semua aplikasi untuk menggunakan nilai alternatif (seperti "C:" dan "\ Users \ myname"). Saya memiliki beberapa utilitas yang diinstal (seperti gvim dan lainnya) yang menyimpan file preferensi di direktori home pengguna.

PENTING : Mengganti envars ini di bawah "System Properties> Variabel Lingkungan" tidak berfungsi . Saya telah mencoba mengatur ini sebagai Variabel Pengguna dan Sistem (termasuk reboot). Mengetik SET HOMEdalam jendela DOS jelas menunjukkan bahwa pengaturan saya diabaikan. Juga, menggunakan "Mulai" pada pintasan Windows juga tidak akan menyelesaikan ini, karena saya memerlukan hal-hal seperti item menu konteks Explorer (seperti "Edit dengan Vim") untuk beroperasi dengan benar.

Saya memiliki hak admin di laptop perusahaan ini, tetapi saya bukan guru Win7. Kembali pada hari itu, skrip boot akan menyelesaikan ini sebentar lagi. Apakah mungkin hari ini? Terima kasih.


2
Departemen TI Anda telah menetapkan kebijakan ini karena suatu alasan. Jika Anda telah mencoba untuk menyelesaikannya dengan mereka dan mereka menolak untuk mengubahnya mungkin ada alasan yang bagus. Jika Anda kemudian terus mengabaikan saran mereka dan menentang apa yang mereka minta persiapkan untuk tindakan disiplin jika Anda tertangkap.
Joe Taylor

29
Setelah lebih dari 30 tahun di industri ini, saya telah belajar bahwa kebijakan TI untuk pengguna PC rata-rata sering tidak memadai (atau bahkan obstruktif) untuk pengembang dan pengguna listrik. TI sering kali harus mengakomodasi kebutuhan pengembang secara berbeda, dan jika ini merupakan pengalaman pembelajaran lain bagi mereka di sini, maka saya senang dapat membantu. Saya ingin mendengar alasan bisnis yang valid untuk membuat direktori home pengguna tidak dapat digunakan.
MykennaC

2
Alasan mengapa tidak menghilangkan masalah, menunjukkan bahwa itu tidak bisa dijalankan untuk pengguna tertentu dan mengusulkan GPO terpisah untuk pengguna tersebut. Bergerak dengan cara yang konstruktif ini jauh lebih mungkin berhasil daripada mencoba mem-bypass kebijakan domain dengan peretasan.
Joe Taylor

6
Akhirnya aku kembali. Mereka tidak akan mengubah apa pun. Ya, kebijakan perusahaan resmi adalah menyediakan direktori home user di mana saya tidak diizinkan membuat file. Aplikasi Windows yang mencoba menggunakan direktori home pengguna default untuk hal-hal seperti file preferensi akan gagal. Apakah tidak ada penyihir di sini yang dapat menawarkan saya solusi untuk ini?
MykennaC

3
ya @ D0rf, dia harus berguling dan ambil saja. Jika TI membuat pekerjaan Anda tidak mungkin, Anda harus berjuang dan meningkatkan keributan sampai diubah. Jika Anda seorang pengembang pasif, maka Anda pantas mendapatkan banyak hal dalam hidup Anda di perusahaan yang mengerikan yang tidak memberi Anda alat yang Anda butuhkan untuk pekerjaan Anda.
Scott

Jawaban:


38

Berikut adalah beberapa retas yang saya kembangkan. Mereka tidak elegan, tetapi mungkin fungsional di lingkungan perusahaan Anda.

HOMEDRIVE Only

Tampaknya banyak aplikasi hanya menggunakan HOMEDRIVE / HOMEPATH. Dalam hal ini, Anda dapat membuat skrip startup yang memetakan ulang huruf drive dasar ke jalur pengguna lokal Anda melalui jalur admin drive UNC:

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

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

Default Lokal HOMEDRIVE

Jika Anda tidak perlu mengakses "Server" dengan nama sama sekali, Anda dapat menyebabkan pengaturan kebijakan grup gagal dan kembali ke mesin lokal Anda. Cara termudah untuk melakukan ini adalah menambahkan entri ke host C: \ Windows \ System32 \ drivers \ etc \ seperti:

127.0.0.1   Server

Setelah reboot, Anda akan melihat sesuatu seperti:

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

HOMEDRIVE / SHARE dengan Hybrid Local / Remote UNC Paths

Jika Anda ingin akses ke "Server" dengan nama untuk beberapa jalur UNC, tetapi menimpa yang lain dengan jalur lokal, saya telah mengembangkan kekejian berikut. Catatan: koneksi server langsung ke "Server" masih akan menyelesaikan ke mesin lokal Anda. Saya merekomendasikan solusi ini hanya jika "Server" hanya file server:

  1. Ubah C: \ Windows \ System32 \ drivers \ etc \ hosts untuk mengarahkan "Server" ke mesin lokal Anda:

    127.0.0.1   Server
    
  2. Tambahkan nilai registri Multi-String berikut ke HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0 untuk memungkinkan kredensial diteruskan ke jalur UNC lokal:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\
    BackConnectionHostNames = Server
    
  3. Buat direktori dummy yang akan berfungsi sebagai root dari Server:

    set DUMMY_LOC=C:\Server_Dummy
    
    mkdir %DUMMY_LOC%
    cd /D %DUMMY_LOC%
    
  4. Untuk setiap jalur UNC Anda ingin mengarahkan ke Server nyata:

    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. Untuk setiap pembagian UNC yang ingin Anda tetapkan secara lokal (seperti Pengguna):

    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. Mulai ulang

Sebagai contoh, ini akan memungkinkan jalur UNC berikut untuk diselesaikan:

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

Resolusi jalur ini harus terjadi sebelum memetakan drive. Selama jalur UNC yang terkait dengan pemetaan adalah valid (baik lokal maupun jarak jauh), huruf drive harus berperilaku seperti yang diharapkan.

Misalnya, dalam pengaturan saya, variabel berikut dipaksakan oleh domain:

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

Tetapi karena pemetaan saya, hasilnya adalah:

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

Saran-saran ini sepertinya dapat membantu JIKA saya bekerja di baris perintah. Untuk memengaruhi aplikasi (seperti gvim) saya mungkin perlu membuat pembungkus. Iterasi atas semua aplikasi yang terkena sepertinya banyak pekerjaan, belum lagi mengubah asosiasi file, dll. Memetakan ulang M saya: drive saat boot adalah saran yang bagus, tetapi bagaimana melakukannya secara global ketika Windows dijalankan (untuk memengaruhi semua aplikasi / kerang)? Saya harap saran ini akan membantu orang lain, tetapi saya tidak berpikir mereka menyelesaikan OP saya
MykennaC

3
Saya belum membutuhkan metode ini dalam beberapa saat, tetapi saya ingat mengembangkannya secara khusus untuk gvim, yang saya percaya menggunakan HOMEDRIVE dan HOMEPATH. Metode ini tidak mengharuskan Anda mengeksekusi dari baris perintah; aplikasi apa pun yang menggunakan variabel atau huruf kandar semuanya akan terpengaruh. Metode # 2 dan # 3 adalah "permanen", dan hanya perlu dijalankan sekali agar perubahan tetap. Metode # 1 dapat dijalankan secara otomatis saat startup dengan menempatkan pintasan di C: \ Users \ <You> \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup, atau mengatur tugas di Penjadwal Tugas. Saya harap ini membantu!
Terrance

@terrance Ahhh, keindahan kekejian yang dibuat dengan baik. LMAO. Terima kasih atas info di sini - dan ada BANYAK di sini ...
David I. McIntosh

3

Solusi terbaik yang saya temukan adalah mengatur variabel saat login dan sebelumnya userinit.exe.

Inilah yang saya lakukan. Pertama kali membuat file batch di C:\Windows\System32\userinit.cmdmengandung

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

dan kemudian mengubah nilai HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinitke C:\Windows\System32\userinit.cmddalam registri.

Informasi lebih lanjut di: https://technet.microsoft.com/en-us/library/cc939862.aspx


Bekerja di Win7, tetapi tidak di Win10.
Semut


0

Saya pikir jalur ini secara otomatis disetel ke tempat profil pengguna Anda. Drive rumah yang Anda maksud adalah tempat di mana ntuser.dat Anda dan data aplikasi serta folder profil pengguna lainnya, benar? Kembali dengan NT3.x, "profil pengguna" hanyalah kumpulan registri pengguna dengan pengaturan dan Anda dapat menetapkan jalur beranda terpisah untuk setiap pengguna. Semua itu disatukan bersama di NT4 sebagai profil pengguna dengan desktop, dokumen saya, menu mulai, dll.

Lokasi semua profil disimpan dalam kunci registri di bawah

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

Anda akan menemukan beberapa nilai untuk profil khusus, dan subkunci: satu untuk setiap profil aktif di sistem. Mereka diatur oleh SID dari akun pengguna milik mereka. Cara termudah untuk menemukan milik Anda adalah dengan menggulir masing-masing mencari jalan yang benar (di bawah ProfileImagePathnilai). Anda harus dapat hanya mengubah nilai itu ke jalur apa pun yang Anda inginkan; itu akan mulai berlaku saat Anda masuk nanti. Pastikan untuk menyalin file Anda ke jalur baru terlebih dahulu.

Jika Anda harus memindahkan profil dari akun tempat Anda masuk (mis. Login sebagai MikeC dan Anda mencoba menyalin profil untuk MikeC) file ntuser.dat (kumpulan registri yang berisi HKEY_CURRENT_USER) akan dikunci oleh kernel. Anda masih dapat menyalin sarang: masuk ke regedit, klik kanan HKEY_CURRENT_USER, pilih ekspor, ubah jenisnya ke file kumpulan registri , dan simpan sebagai ntuser.dat di lokasi baru Anda.

Dalam pengalaman saya jika winlogon memiliki masalah memuat profil karena ada sesuatu yang salah, itu akan membuat salinan baru dari profil default atau memberi Anda salinan sementara untuk digunakan untuk sesi itu dan Anda masih dapat login masuk. Namun, saya sarankan Anda memiliki login admin yang berbeda untuk digunakan pada sistem jika terjadi kesalahan.


Nah, satu-satunya item di ProfileList saya yang tampaknya relevan adalah ProfileImagePath, yang ditampilkan sebagai C: \ Users \ mcepek. Itu cocok dengan yang ditunjukkan SET USERPROFILE kepada saya, tapi itu bukan fokus saya di sini. Saya perlu memengaruhi HOMEPATH dan HOMEDRIVE. Hanya untuk bersenang-senang, saya mencari item dengan nilai atau set data pada "M:" (cocokkan seluruh string = dicentang) dan muncul hanya dengan Komputer / HKEY_USERS / xxxx / Lingkungan Volatile / HOMEDRIVE. Mengubahnya menjadi C: tampaknya tidak berpengaruh pada sesi login saya saat ini. Setelah reboot, nilainya kembali ke M: (tidak mengejutkan).
MykennaC


0

Alternatif yang agak lebih mudah adalah dengan menjalankan skrip di bawah ini (env-reset.vbs) sebagai tugas yang dijadwalkan saat masuk, membuka kunci dan mungkin setiap beberapa menit juga.

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.