以 Windows 7 用户身份覆盖 HOMEDRIVE 和 HOMEPATH

以 Windows 7 用户身份覆盖 HOMEDRIVE 和 HOMEPATH

我的雇主有一个 Active Directory 组策略,将我的 Windows 7 笔记本电脑 HOMEDRIVE 设置为“M:”(映射网络驱动器),将我的 HOMEPATH 设置为“\”。由于我对该共享驱动器的根目录具有只读权限,因此我无法在 Windows 主目录中创建文件或目录。我尝试与 IT 部门合作,但未成功。

有没有办法全球在启动或登录时更改这些 envar?我需要全部应用程序使用替代值(例如“C:”​​和“\Users\myname”)。我安装了一些实用程序(例如 gvim 等),它们将首选项文件存储在用户的主目录中。

重要的:在“系统属性 > 环境变量”下更改这些环境变量不起作用。我尝试过将这些设置为用户和系统变量(包括重新启动)。SET HOME在 DOS 窗口中键入时,我的设置显然被忽略了。此外,在 Windows 快捷方式中使用“开始”也会不是解决这个问题,因为我需要像资源管理器上下文菜单项(比如“用 Vim 编辑”)这样的东西才能正确运行。

我确实拥有这台公司笔记本电脑的管理员权限,但我不是 Win7 专家。以前,启动脚本可以在一分钟内解决这个问题。现在还能解决吗?谢谢。

答案1

以下是我开发的一些技巧。它们并不优雅,但可能在您的公司环境中有用。

仅限 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

具有混合本地/远程 UNC 路径的 HOMEDRIVE/SHARE

如果您希望通过名称访问某些 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

答案2

我发现的最佳解决方案是在登录期间和之前设置变量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

答案3

SETX在启动脚本中使用了它,它对我有用。请参阅我的回答

答案4

我发布此帖是为了防止其他人通过 Google 遇到此问题。我没有更改我的主目录并让 IS 人员对我发火,而是在虚拟机上设置并运行我的开发。Microsoft 以虚拟模式提供 Widows XP。http://www.microsoft.com/windows/virtual-pc/download.aspx

相关内容