登录脚本中的 WS2008 替换不“坚持”

登录脚本中的 WS2008 替换不“坚持”

我有一个仅使用 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”的“驱动器”。

如果您不打算使用组策略首选项,那么您有两个选择:

答案3

我要尝试做的第一件事就是将 T 盘映射到其他东西(比如您知道有效的文件共享),以消除系统上的任何驱动器号限制。

然后,如果可行,我会尝试以交互方式运行脚本,即以实际用户身份打开 cmd 提示符并输入脚本命令/路径。

如果这也有效,我们可以肯定脚本本身有效,但登录时执行脚本可能无效。您有其他可以测试的脚本吗?还请检查您的 GPO 设置以了解异步脚本执行。

与往常一样,在大海捞针时:尝试消除/隔离环境中可能导致此问题的所有变量(这是我们上面所做的),例如禁用所有 GPO 并再次测试。如果有效,则在您的环境中启用一个 GPO,然后再次测试您所做的每个更改。

抱歉我不能说得更具体,但“隔离和测试”方法通常是解决此类问题的最快方法。

答案4

尝试过用普通的旧式“网络使用”来映射它吗?

相关内容