我有一个仅使用 Windows Server 2008 的终端服务器环境。
我的问题是我需要将驱动器号“映射”到每个用户的 Temp 文件夹。这是因为旧版应用程序要求每个用户都有一个单独的 Temp 文件夹,但它无法理解 %temp%。
那么,只需将“subst t: %temp%”添加到登录脚本中,对吗?
问题是,即使命令运行,subst 也不会“粘住”,用户也不会获得 T: 驱动器。
这是我尝试过的;
最简单的版本:
'Mapping a temp drive
Set WinShell = WScript.CreateObject("WScript.Shell")
WinShell.Run "subst T: %temp%", 2, True
这不起作用,因此尝试了这个来获取更多调试信息:
'Mapping a temp drive
Set WinShell = WScript.CreateObject("WScript.Shell")
Set procEnv = WinShell.Environment("Process")
wscript.echo(procEnv("TEMP"))
tempDir = procEnv("TEMP")
WinShell.Run "subst T: " & tempDir, 3, True
这显示了用户登录时正确的临时路径 - 但仍然没有 T: Drive。决定诉诸暴力破解并将其放入我的登录脚本中:
'Mapping a temp drive
Set WinShell = WScript.CreateObject("WScript.Shell")
WinShell.Run "\\domain\sysvol\esl.hosted\scripts\tempdir.cmd", 3, True
其中 \domain\sysvol\esl.hosted\scripts\tempdir.cmd 包含以下内容:
echo on
subst t: %temp%
pause
当我使用上述命令登录时,命令窗口打开了,我可以看到 subst 命令被正确执行,并且路径正确。但仍然没有 T: 驱动器。
我曾尝试在登录脚本之外运行上述所有脚本,它们始终运行良好 - 仅在从登录脚本内部执行时才会出现此问题。
我在MSFN 论坛当用户已经登录到另一台机器时也会出现类似的问题 - 但即使没有登录到另一台机器,我也遇到了这个问题。
如有任何关于如何克服这一问题的建议,我们将不胜感激。
答案1
如果您为用户配置文件所在的驱动器(通常为 C:\Users)创建共享。假设共享为 PROFILE$,则可以使用如下脚本:
@echo off
echo. TEMP Drive Mapping
:TEMPDRIVE
echo. Mapping Temp Drive...
if exist T:\ echo Y | subst T: /d
if exist T:\ echo Y | net use T: /D
if exist T:\ goto :TEMPDRIVE_ERROR
if not exist %temp% MD %temp%
NET USE T: \\localhost\profiles$\%temp:~9% /P:N > nul: 2>&1
if not exist T:\ goto :TEMPDRIVE_ERROR
goto :TEMPDRIVE_COMPLETE
:TEMPDRIVE_ERROR
echo. ERROR: Unable to MAP Temp Drive!
:TEMPDRIVE_COMPLETE
:END
:EXIT
GOTO :EOF
在 Windows Server 2008 上,%TEMP% 通常以 C:\Users\ 为前缀,因此使用 %temp:~9% 来删除该前缀。如果使用 Windows Server 2003,则为 %temp:~12%
答案2
我猜测您的用户具有“管理员”权限,并且终端服务器上启用了用户帐户控制。
如果事实确实如此,那么您看到的就是“设计使然”的行为。
我强烈怀疑您的脚本运行正常。由于启用了用户帐户控制,因此运行 Explorer 的用户过滤令牌无法访问登录脚本运行时“SUBST”的“驱动器”。
如果您不打算使用组策略首选项,那么您有两个选择:
将用户设为标准用户。这是我的偏好,但对于大多数人来说似乎太难处理。
将 EnableLinkedConnections 注册表值更改为“1”(请参阅http://support.microsoft.com/default.aspx?scid=kb;EN-US;937624了解详情)。
答案3
我要尝试做的第一件事就是将 T 盘映射到其他东西(比如您知道有效的文件共享),以消除系统上的任何驱动器号限制。
然后,如果可行,我会尝试以交互方式运行脚本,即以实际用户身份打开 cmd 提示符并输入脚本命令/路径。
如果这也有效,我们可以肯定脚本本身有效,但登录时执行脚本可能无效。您有其他可以测试的脚本吗?还请检查您的 GPO 设置以了解异步脚本执行。
与往常一样,在大海捞针时:尝试消除/隔离环境中可能导致此问题的所有变量(这是我们上面所做的),例如禁用所有 GPO 并再次测试。如果有效,则在您的环境中启用一个 GPO,然后再次测试您所做的每个更改。
抱歉我不能说得更具体,但“隔离和测试”方法通常是解决此类问题的最快方法。
答案4
尝试过用普通的旧式“网络使用”来映射它吗?