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

Myk*_*naC 56 windows-7 environment-variables active-directory

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

有没有一种方式,全球在启动或登录时间改变这些envars?我需要所有应用程序都使用备用值(例如“C:”​​和“\Users\myname”)。我有一些已安装的实用程序(如 gvim 和其他)将首选项文件存储在用户的主目录中。

重要提示:在“系统属性 > 环境变量”下更改这些环境变量不起作用。我尝试将这些设置为用户和系统变量(包括重新启动)。SET HOME在 DOS 窗口中键入清楚地表明我的设置被忽略了。此外,“在开始”使用Windows快捷方式也没有解决这个问题,因为我需要一个像资源管理器右键菜单项的东西(如“用Vim编辑”)正常工作。

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

Ter*_*nce 42

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

仅限 HOMEDRIVE

似乎许多应用程序只使用 HOMEDRIVE / HOMEPATH。在这种情况下,您可以创建一个启动脚本,通过 UNC 驱动器管理路径将基本驱动器号重新映射到您的本地用户路径:

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

net use g: /delete
net use g: \\localhost\C$\Users\username
Run Code Online (Sandbox Code Playgroud)

HOMEDRIVE 本地默认

如果您根本不需要按名称访问“服务器”,则可能会导致组策略设置失败并回退到您的本地计算机。最简单的方法是向C:\Windows\System32\drivers\etc\hosts添加一个条目,如:

127.0.0.1   Server
Run Code Online (Sandbox Code Playgroud)

重新启动后,您应该看到如下内容:

set HOME
HOMEDRIVE=C:
HOMEPATH=\Users\username
Run Code Online (Sandbox Code Playgroud)

使用混合本地/远程 UNC 路径的 HOMEDRIVE/SHARE

如果您想通过某些 UNC 路径的名称访问“服务器”,但使用本地路径覆盖其他路径,我开发了以下可恶的方法。注意:与“服务器”的直接服务器连接仍将解析为您的本地计算机。仅当“服务器”只是文件服务器时,我才推荐此解决方案:

  1. 修改C:\Windows\System32\drivers\etc\hosts以将“服务器”重定向到您的本地机器:

    127.0.0.1   Server
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将以下多字符串注册表值添加到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0以允许将凭据传递到本地 UNC 路径:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\
    BackConnectionHostNames = Server
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建一个虚拟目录作为服务器的根目录:

    set DUMMY_LOC=C:\Server_Dummy
    
    mkdir %DUMMY_LOC%
    cd /D %DUMMY_LOC%
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  6. 重启

例如,这将允许解析以下 UNC 路径:

\\Server\Remote_Example => \\Server.network.blah.com\Remote_Example
\\Server\Users          => C:\Users
Run Code Online (Sandbox Code Playgroud)

此路径解析应在驱动器映射之前进行。只要与映射关联的 UNC 路径有效(无论是本地的还是远程的),驱动器号就应该按预期运行。

例如,在我的设置中,域强制使用以下变量:

set HOME
HOMEDRIVE=G:
HOMEPATH=\
HOMESHARE=\\Server\Users\username
Run Code Online (Sandbox Code Playgroud)

但由于我的映射,结果是:

G: => \\Server\Users\username => C:\Users\username
Run Code Online (Sandbox Code Playgroud)

  • 我已经有一段时间不需要这些方法了,但我记得专门为 gvim 开发它们,我相信它使用的是 HOMEDRIVE 和 HOMEPATH。这些方法不需要您从命令行执行;任何使用变量或驱动器号的应用程序都将受到影响。方法 #2 和 #3 是“永久的”,只需执行一次即可使更改保持不变。通过在 C:\Users\<You>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 中放置快捷方式,或在 Task Scheduler 中设置任务,可以在启动时自动执行方法 #1。我希望这有帮助! (3认同)

Chr*_*ith 0

我认为这些路径会自动设置为您的用户配置文件所在的位置。您所指的主驱动器是 ntuser.dat 和应用程序数据以及其他用户配置文件文件夹所在的位置,对吗?回到 NT3.x,“用户配置文件”只是带有设置的用户注册表配置单元,您可以为每个用户设置单独的主路径。这些在 NT4 中统一为用户配置文件,包括桌面、我的文档、开始菜单等。

所有配置文件的位置都存储在下面的注册表项中

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
Run Code Online (Sandbox Code Playgroud)

您将找到特殊配置文件和子项的一些值:一个对应于系统上的每个活动配置文件。它们由所属用户帐户的 SID 设置。找到您的路径的最简单方法是滚动浏览每个路径,寻找正确的路径(在ProfileImagePath值下方)。您应该能够将该值更改为您想要的任何路径;下次登录时生效。请务必先将文件复制到新路径。

如果您必须从您登录的帐户中移动配置文件(即以 MikeC 身份登录并且您尝试复制 MikeC 的配置文件),则 ntuser.dat 文件(包含 的注册表配置单元)HKEY_CURRENT_USER将被内核锁定。您仍然可以复制配置单元:进入 regedit,右键单击HKEY_CURRENT_USER,选择导出,将类型更改为注册表配置单元文件,然后在新位置另存为 ntuser.dat。

根据我的经验,如果 winlogon 由于设置错误而加载配置文件时出现问题,它会从默认配置文件创建一个新副本,或者为您提供一个用于该会话的临时副本,您仍然可以登录但是,我建议您在系统上使用不同的管理员登录名,以防出现问题。