Windows 7 사용자로 HOMEDRIVE 및 HOMEPATH 대체


49

내 고용주는 Windows 7 랩톱 HOMEDRIVE를 "M :"(매핑 된 네트워크 드라이브)으로 설정하고 내 HOMEPATH를 "\"로 설정하는 Active Directory 그룹 정책을 가지고 있습니다. 해당 공유 드라이브의 루트에 대한 읽기 전용 권한이 있으므로 Windows 홈 디렉토리에 파일 또는 디렉토리를 작성할 수 없습니다. IT 부서와 협력하려는 시도가 실패했습니다.

수있는 방법이 있나요 나를 위해 세계적으로 부팅 또는 로그인시에 이러한 envars 변경은? 내가이 필요한 모든 응용 프로그램 (:와 "\ 사용자 \ MyName로"예 "C"와 같은) 다른 값을 사용 할 수 있습니다. 환경 설정 파일을 사용자의 홈 디렉토리에 저장하는 일부 설치된 유틸리티 (gvim 및 기타 유틸리티)가 있습니다.

중요 : "시스템 속성> 환경 변수"에서 이러한 envar을 변경하면 작동하지 않습니다 . 사용자 및 시스템 변수 (재부팅 포함)로 설정하려고했습니다. SET HOMEDOS 창에 입력 하면 내 설정이 무시된다는 것이 분명해집니다. 또한 Windows 바로 가기에서 "시작"을 사용하면 제대로 작동하려면 탐색기 컨텍스트 메뉴 항목 (예 : "Vim으로 편집")과 같은 항목이 필요하므로이 문제를 해결 하지 못합니다.

이 회사 랩탑에 대한 관리자 권한이 있지만 Win7 전문가가 아닙니다. 당시에는 부트 스크립트가이 문제를 1 분 안에 해결했을 것입니다. 오늘도 가능합니까? 감사.


2
IT 부서에서 이러한 정책을 설정했습니다. 당신이 그들과 함께 그것을 해결하려고 노력하고 그들이 그것을 변경하기를 거부했다면 아마 좋은 이유가있을 것입니다. 그런 다음 그들의 조언을 계속 무시하고 그들이 잡히면 징계 조치를 준비하도록 요청한 것에 반대하십시오.
Joe Taylor

28
이 업계에서 30 년이 지난 후, 나는 일반 PC 사용자에 대한 IT 정책이 종종 개발자와 고급 사용자에게는 부적절하거나 심지어 방해가된다는 것을 알게되었습니다. IT는 종종 개발자의 요구를 다르게 수용해야했으며, 여기에 또 다른 학습 경험이 있다면 기꺼이 도와 드리겠습니다. 사용자의 홈 디렉토리를 사용할 수 없게 만드는 유효한 비즈니스 이유를 듣고 싶습니다.
MykennaC

2
문제를 해결하지 않는 이유는 특정 사용자에게는 문제가 있음을 보여주고 해당 사용자에 대해 별도의 GPO를 제안합니다. 이 건설적인 방식으로 전환하는 것은 해킹으로 도메인 정책을 우회하는 것보다 훨씬 효과적입니다.
Joe Taylor

6
마침내 나에게 돌아왔다. 그들은 아무것도 바꾸지 않을 것입니다. 예, 공식 회사 정책은 파일을 만들 수없는 사용자 홈 디렉토리를 제공하는 것입니다. 기본 설정 파일과 같은 것에 기본 사용자 홈 디렉토리를 사용하려는 Windows 응용 프로그램은 실패합니다. 여기에 대한 해결 방법을 제공 할 수있는 마법사가 있습니까?
MykennaC

3
예 @ D0rf, 그는 롤오버하고 그냥 가져 가야합니다. IT 부서에서 업무를 수행 할 수 없게되면 변경 될 때까지 소란을 불러 일으켜야합니다. 수동 개발자 인 경우 업무에 필요한 도구를 제공하지 않는 끔찍한 회사에서 많은 일을 할 자격이 있습니다.
Scott

답변:


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 \ drivers \ etc \ hosts에 다음 과 같이 항목을 추가하는 것입니다.

127.0.0.1   Server

재부팅 후 다음과 같은 내용이 표시됩니다.

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

하이브리드 로컬 / 원격 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 공유에 대해 (예 : 사용자) :

    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가 시작될 때이를 전 세계적으로 수행하는 방법 (모두에 영향을 미치기 위해) 앱 / 쉘)? 이러한 제안이 다른 사람들에게 도움이 되길 바랍니다. 그러나 그들이 내 OP를 해결하지 못한다고 생각합니다
MykennaC

3
나는이 방법들이 한동안 필요하지 않았지만 HOMEDRIVE와 HOMEPATH를 사용하고 있다고 생각하는 gvim을 위해 특별히 개발 한 것을 상기합니다. 이러한 메소드는 명령 행에서 실행할 필요가 없습니다. 변수 또는 드라이브 문자를 사용하는 모든 응용 프로그램이 영향을받습니다. 방법 # 2와 # 3은 "영구적"이며 변경 사항을 적용하려면 한 번만 실행하면됩니다. 방법 # 1은 C : \ Users \ <You> \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup에 바로 가기를 배치하거나 작업 스케줄러에서 작업을 설정하여 시작할 때 자동으로 실행될 수 있습니다. 이게 도움이 되길 바란다!
Terrance

@terrance Ahhh, 잘 만들어진 가증 한 아름다움. LMAO. 여기에 정보를 주셔서 감사합니다 - 그리고 ... 여기에 톤이
데이비드 I. 매킨토시

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에 무언가 잘못 설정되어 프로파일을로드하는 데 문제가있는 경우 기본 프로파일에서 새 사본을 작성하거나 해당 세션에 사용할 임시 사본을 제공하고 여전히 로그인 할 수 있습니다 그러나 문제가 발생할 경우를 대비하여 시스템에서 다른 관리자 로그인을 사용하는 것이 좋습니다.


내 ProfileList의 유일한 항목은 ProfileImagePath이며 C : \ Users \ mcepek으로 표시됩니다. SET USERPROFILE이 보여주는 것과 일치하지만 여기서는 내 초점이 아닙니다. HOMEPATH와 HOMEDRIVE에 영향을 주어야합니다. 재미를 위해 값이나 데이터가 "M :"(전체 문자열 만 일치 = 선택)으로 설정된 항목을 레지스트리에서 검색했으며 Computer / HKEY_USERS / xxxx / Volatile Environment / HOMEDRIVE 만 나타났습니다. C로 변경 : 현재 로그인 세션에 영향을 미치지 않는 것 같습니다. 재부팅 후 값은 다시 M :으로 돌아 왔습니다.
MykennaC


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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.