Проблема:
Имеется контроллер домена на Microsoft Windows Server 2003 R2 + рабочие станции на Microsoft Windows XP SP3 Professional и Microsoft Windows 7 Professional. Рабочие станции заведены в домен. В домене в групповых политиках для пользователей прописан скрипт, подключающий сетевой диск.
При входе на ПК с Windows XP, сетевые диски подключаются нормально, при входе на некоторые ПК с Windows 7 сетевые диски не подключаются, при входе на другие ПК, тоже с ОС Windows 7 - подключаются нормально.
Если на "ненормальном" ПК запустить этот же скрипт вручную, после загрузки интерфейса пользователя, то диски нормально подключатся. Более того, все остальные команды скрипта (и до и после команды подключения дисков) корректно выполняются на всех компьютерах домена.
Пытался подключать диски и из bat-файла:
Код: Выделить всё
@echo off
net use W: \\Server\Share1\Folder1 /PERSISTENT:NO
start "Mail" "https://mail.server.ru/webmail/login.php"
echo Y|reg import "\\Server\Share2\Folder2\Folder3\ForAllUsers.reg"
и из VBS-скрипта:
Код: Выделить всё
ON ERROR RESUME NEXT
set wshNetwork = WScript.CreateObject( "WScript.Network")
Set oShell = WScript.CreateObject("WScript.Shell")
DesktopPath = oShell.SpecialFolders("Desktop")
do while WSHNetwork.username = ""
WScript.Sleep 250
loop
WSHNetwork.MapNetWorkDrive "W:", "\\Server\Share1\Folder1"
set FSO=CreateObject("Scripting.FileSystemObject")
FSO.CopyFile "\\Server\Share2\Folder2\Folder3\Слушать радио.url",DesktopPath & "\Слушать радио.url""
FSO.CopyFile "\\Server\Share2\Folder2\Folder3\Дубль ГИС на сервере.lnk",DesktopPath & "\Дубль ГИС на сервере.lnk"
Решение:
Корень зла оказался во включенном контроле учетных записей пользователей. Необходимо отключить его (что не совсем правильно), либо, (что правильнее) согласно KB937624 в реестре по адресу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System создать параметр "EnableLinkedConnections" типа DWord и значением "1", после чего при следующем входе в систему все диски нормально подключатся.
Для тех, кому лень лазить в реестр, прилагаю файл реестра для импорта:
Код: Выделить всё
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"EnableLinkedConnections"=dword:1
К сожалению, в групповых политиках контроллера домена на MS Windows 2003 Server R2 нет возможности изменять вышеуказанный параметр. Поэтому для всех ПК с ОС MS Windows 7 приходится либо вручную вносить в реестр этот параметр, либо применить административный шаблон:
После применения шаблона, управлять параметром "EnableLinkedConnections" можно в групповых политиках - Конфигурация компьютера -> Административные шаблоны -> Система -> Сетевой вход в систему -> Разрешить подключение сетевых дисков из загрузочных скриптов"
Примечание:
Способ с параметром "EnableLinkedConnections" не работает на Windows 8 + MS Windows 2003 Server. Точнее работает, но как-то неполноценно. Так, подключая расшаренный ресурс \\Server\Share\Folder, мы видим, что подключение на Windows 8 прошло нормально, в подключенных дисках все отображается правильно, и net use показывает корректное подключение. Но на самом деле, при попытке открыть подключенный диск, мы попадаем в папку \\Server\Share\, а не в \\Server\Share\Folder. И вне зависимости от глубины подключаемого общего ресурса, мы попадем лишь в коревую папку (например, даже если подключаться к \\Server\Share\Folder1\Folder2\Folder3\Folder4, по-факту мы подключимся только к \\Server\Share).
В этом случае помогает только ПОЛНОЕ отключение контроля учетных записей пользователей (UAC). Причем не перемещение ползунка вниз в менеджере контроля UAC, а именно отключение в реестре. Нужно поменять значение параметра «EnableLUA» на «0» по адресу HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System и перезагрузить компьютер. После этого сетевые диски подключатся нормально.
Поскольку, имхо, этот метод не очень хорош, то применять его нужно только в исключительных случаях. Тем не менее (пока ищу нормальное решение), для желающих выкладываю административный шаблон для изменения этого параметра через групповые политики Windows 2003 Server:
Спойлер
Код: Выделить всё
#if version >= 3
CLASS MACHINE
CATEGORY !!Network
CATEGORY !!sConnections
POLICY !!Text
KEYNAME "SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
EXPLAIN !!ExplConnections
VALUENAME "EnableLinkedConnections"
VALUEON NUMERIC 1
VALUEOFF NUMERIC 0
END POLICY
END CATEGORY ;sConnections
POLICY !!UACPolicy
KEYNAME "SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
EXPLAIN !!ExplEnableLUA
VALUENAME "EnableLUA"
VALUEON NUMERIC 1
VALUEOFF NUMERIC 0
END POLICY
END CATEGORY ;Network
#endif
[Strings]
Network="Система"
sConnections="Сетевой вход в систему"
Text="Разрешить подключение сетевых дисков из загрузочных скриптов"
UACPolicy="Политика контроля учётных записей (UAC)"
ExplEnableLUA="Включить контроль учетных записей (UAC)"
ExplConnections="Разрешает подключение сетевых дисков из скриптов, применяемых при входе пользователя в систему. Актуально для MS Windows 7 со включенным UAC (контроль учетных записей)"
Этот шаблон включает в себя и предыдущий шаблон NetConnect для изменения параметра «LinkedConnections». То есть устанавливая шаблон NetConnect&UAC.adm, шаблон NetConnect уже не нужен.
Новые параметры будут отображены в групповых политиках в разделах:
-
«LinkedConnections»: Конфигурация компьютера -> Административные шаблоны -> Система -> Сетевой вход в систему -> Разрешить подключение сетевых дисков из загрузочных скриптов"
-
«EnableLUA»: Конфигурация компьютера -> Административные шаблоны -> Система -> Политика контроля учётных записей (UAC)
Обсуждение этой проблемы можно почитать здесь и здесь. По-сути, решения пока нет. Это считается багом Windows 8. Народ ждет Windows 8.1.