Назад | Перейти на главную страницу

Подстановка WS2008 в сценарии входа в систему не «прилипает»

У меня есть среда терминального сервера исключительно с 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

Пробовали сопоставить это с простым старым "чистым использованием"?