我有一个专门用于Windows Server 2008的terminal服务器环境。
我的问题是我需要将驱动器号映射到每个用户Temp文件夹。 这是由于传统的应用程序,每个用户需要一个单独的Temp文件夹,但不能理解%temp%。
所以,只需在login脚本中添加“subst t:%temp%”,对不对?
问题在于,即使命令运行,subst也不会“粘住”,而用户也不会得到T:驱动器。
这是我所尝试的;
最简单的版本:
'Mapping a temp drive Set WinShell = WScript.CreateObject("WScript.Shell") WinShell.Run "subst T: %temp%", 2, True
这不起作用,所以尝试了更多的debugging信息:
'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
这显示我用户login时正确的临时path – 但仍然没有T:驱动器。 决定诉诸暴力,把这个在我的login脚本:
'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
当我用上面的login时,命令窗口打开,我可以看到正确的执行正确的path的subst命令。 但仍然没有T:开车。
我已经尝试在login脚本之外运行上述所有脚本,并且它们总能正常工作 – 只有在login脚本中执行此操作时才会出现此问题。
当用户已经login到另一台机器时,我在MSFN论坛上发现了一个关于类似问题的传递引用 – 但即使没有login到另一台机器,我也有这个问题。
任何有关如何克服这一点的build议将不胜感激。
如果为用户configuration文件所在的驱动器创build共享(通常为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
通常,%TEMP%在Windows Server 2008上以C:\ Users \为前缀,这就是为什么%temp:〜9%用于删除该前缀的原因。 如果使用Windows Server 2003,则会是%temp:〜12%
我猜测你的用户有“pipe理员”权限,并且terminal服务器上启用了用户帐户控制。
如果是这样的话,那么你所看到的是一个“按devise”的行为。
我强烈怀疑你的脚本运行良好。 由于“用户帐户控制”已启用,因此用户运行Explorer的已过滤令牌无法访问运行login脚本时“SUBST”的“驱动器”。
如果你不打算使用组策略首选项,那么你有两个select:
使用户标准用户。 这是我的select,但对于大多数人来说似乎太困难了。
将EnableLinkedConnectionsregistry值更改为“1”(有关详细信息,请参阅http://support.microsoft.com/default.aspx?scid=kb;EN-US;937624 )。
首先我要尝试的是将T驱动器映射到其他东西(比如你知道的文件共享),以消除系统上的任何驱动器限制。
然后,如果这样做,我会尝试交互式运行脚本,即作为实际用户打开cmd提示符并input脚本命令/path。
如果这也可以,我们可以肯定脚本本身有效,但login时的脚本执行可能不会。 你有另一个脚本可以testing吗? 还请检查您的GPO设置以执行asynchronous脚本。
与往常一样,在大海捞针中:尝试并消除/隔离可能导致此问题的环境中的所有variables(这是我们上面所做的),f.instance通过禁用所有GPO并再次testing。 如果有效,那么在您的环境中启用一个和一个GPO,然后再次testing您所做的每个更改。
对不起,我不能更具体,但“隔离和testing”的方法往往是解决这些问题的最快方法。
VBS跟随脚本
'Mapping a temp drive Set WinShell = WScript.CreateObject("WScript.Shell") WinShell.Run "subst T: %temp%", 2, False
在我的Windows Server 2008/2008 R2上运行得非常好
试图映射它与普通的旧“净使用”?