У меня есть среда терминального сервера исключительно с Windows Server 2008.
Моя проблема в том, что мне нужно «сопоставить» букву диска с папкой Temp каждого пользователя. Это связано с тем, что унаследованное приложение требует отдельной папки Temp для каждого пользователя, но не поддерживает% temp%.
Итак, просто добавьте «subst t:% temp%» в сценарий входа, верно?
Проблема в том, что, хотя команда выполняется, подстановка не «закрепляется», и пользователь не получает диск 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: drive.
Я пробовал запускать все вышеперечисленные сценарии вне сценария входа в систему, и они всегда работают безупречно - эта проблема возникает только при выполнении изнутри сценария входа.
Я нашел ссылку на Форум MSFN о подобной проблеме, когда пользователь уже вошел в систему на другой машине, но у меня эта проблема даже без входа на другую машину.
Мы будем очень благодарны за любые предложения о том, как это преодолеть.
Я собираюсь предположить, что ваши пользователи имеют права «Администратора», а на сервере терминалов включен контроль учетных записей.
Если это так, то то, что вы видите, является «преднамеренным» поведением.
Я сильно подозреваю, что ваш скрипт работает нормально. Поскольку контроль учетных записей пользователей включен, отфильтрованный маркер пользователей, под которым работает Explorer, не имеет доступа к «дискам», которые были «SUBST» при запуске сценария входа в систему.
Если вы не собираетесь использовать настройки групповой политики, у вас есть два варианта:
Сделайте пользователей стандартными пользователями. Это было бы моим предпочтением, но большинству людей кажется, что с ним слишком сложно справиться.
Измените значение реестра EnableLinkedConnections на «1» (см. http://support.microsoft.com/default.aspx?scid=kb;EN-US;937624 подробнее).
Если вы создаете общий ресурс для диска, на котором расположены профили пользователей (обычно 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% имеет префикс C: \ Users \ в Windows Server 2008, поэтому для удаления этого префикса используется% temp: ~ 9%. При использовании Windows Server 2003 это будет% temp: ~ 12%.
Первое, что я хотел бы попробовать, это сопоставить диск T с чем-то другим (например, с файловым ресурсом, который, как вы ЗНАЕТЕ, работает), просто чтобы устранить любые ограничения буквы диска в вашей системе.
Затем, если это сработает, я бы попытался запустить скрипт в интерактивном режиме, то есть запустить командную строку как фактический пользователь и ввести команду скрипта / путь.
Если это тоже работает, мы можем быть уверены, что сам сценарий работает, но выполнение сценария при входе в систему может не работать. У вас есть другой сценарий, с помощью которого вы могли бы протестировать? Также проверьте настройки GPO для выполнения асинхронного сценария.
Как всегда, при поиске иголки в стоге сена: попробуйте исключить / изолировать все переменные в вашей среде, которые могут вызвать это (это то, что мы сделали выше), например, отключив все GPO и снова протестируйте. Если это сработает, включите один и один объект групповой политики в своей среде и снова проверяйте каждое внесенное изменение.
Извините, я не могу быть более конкретным, но подход «изолировать и проверить» часто является самым быстрым способом решения таких проблем.
VBS со следующим скриптом
'Mapping a temp drive
Set WinShell = WScript.CreateObject("WScript.Shell")
WinShell.Run "subst T: %temp%", 2, False
неплохо работает на моем Windows Server 2008/2008 R2
Пробовали сопоставить это с простым старым "чистым использованием"?