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 / 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)
如果您根本不需要按名称访问“服务器”,则可能会导致组策略设置失败并回退到您的本地计算机。最简单的方法是向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 路径的名称访问“服务器”,但使用本地路径覆盖其他路径,我开发了以下可恶的方法。注意:与“服务器”的直接服务器连接仍将解析为您的本地计算机。仅当“服务器”只是文件服务器时,我才推荐此解决方案:
修改C:\Windows\System32\drivers\etc\hosts以将“服务器”重定向到您的本地机器:
127.0.0.1 Server
Run Code Online (Sandbox Code Playgroud)将以下多字符串注册表值添加到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)创建一个虚拟目录作为服务器的根目录:
set DUMMY_LOC=C:\Server_Dummy
mkdir %DUMMY_LOC%
cd /D %DUMMY_LOC%
Run Code Online (Sandbox Code Playgroud)对于要定向到真实服务器的每个 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)对于您要在本地定义的每个 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)重启
例如,这将允许解析以下 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)
我认为这些路径会自动设置为您的用户配置文件所在的位置。您所指的主驱动器是 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 由于设置错误而加载配置文件时出现问题,它会从默认配置文件创建一个新副本,或者为您提供一个用于该会话的临时副本,您仍然可以登录但是,我建议您在系统上使用不同的管理员登录名,以防出现问题。