Моя попытка навести порядок и унификацию при подключении сетевых дисков в AD.
Возможна работа как через индивидуальные групповые политики, так и через политику AD по-умолчанию.
Идея состоит в следующем: храним описание вариантов подключений в текстовых файлах, с указанием группы для которой это работает, и анализируем при запуске грeппы конкретного пользователя с использованием dsget и dsquery.
Структура хранимых описаний такова: групповые и общедоменные назначачения хранятся в едином файле расположенном в корне NETLOGON(возможны варианты), а пользовательские назначения располагаются в папках с пользовательским именем входа в систему.
Также в отдельных файлах храним описание запускаемых скриптов для групп и пользователей.
Цель - получить прозрачный и универсальный алгоритм входа в систему единый как для обычного входа, так и для терминального, без черезмерного усложнения групповых политик.
Структура решения:
\dsget.exe - файл из RK для получения списка групп пользователя
\dsquery.dll- файл из RK для получения списка групп пользователя
\dsquery.exe- файл из RK для получения списка групп пользователя
\logon.cmd - собственно тело скрипта
\logon.vbs - костыль для запуска без отображения окна консоли - именно он должен быть назначен в качестве логон скрипта
\rs_list.txt - список групповых и общедоменных назначений подключаемых дисков с указанием группы
\sc_list.txt - список групповых и общедоменных назначений выполняемых скриптов с указанием группы
\_SCRIPT\ - папка с групповыми и общедоменными скриптами
\_SCRIPT\1C.cmd - пример скрипта
\USER1\rs_list.txt- список назначений подключаемых дисков для конкретного пользователя(без указания группы)
\USER1\sc_list.txt- список назначений выполняемых скриптов для конкретного пользователя(без указания группы)
\USER2\rs_list.txtсписок назначений подключаемых дисков для конкретного пользователя(без указания группы)
\USER2\sc_list.txt- список назначений выполняемых скриптов для конкретного пользователя(без указания группы)
Прикрепляю файл с телом скрипта и тестовой структурой.
Приветствуются пожелания по доработке ;)
Добавил ключ рекурсивного анализа вхождения в группы.
И на всякий случай тело скрипта в текстовом виде:
@ECHO OFF :: Буквы дисков зарезервированные под пользовательские сетевые подключения SET "EXLUDE_LETTER=D: E: F: J: H: I: J:" "%~dp0dsquery.exe" user -d "%USERDOMAIN%" -samid "%USERNAME%"|^ %~dp0dsget.exe user -memberof |findstr /I /C:"CN=Domain Users,"&&( :: Удаление текущих сетевых подключений FOR /F "usebackq tokens=2 delims= " %%a IN (`net use^|find ":"^|find "\\"^|FINDSTR /V /I "%EXLUDE_LETTER%"`) DO ( 1>NUL 2>&1 NET USE /DELETE %%a) :: Добавление групповых сетевых подключений IF EXIST "%~dp0rs_list.txt" ( FOR /F "usebackq tokens=1,2,3 eol=; delims=|" %%a IN (`TYPE "%~dp0rs_list.txt"^|FIND "\\"`) DO ( "%~dp0dsquery.exe" user -d "%USERDOMAIN%" -samid "%USERNAME%"|^ %~dp0dsget.exe user -memberof -expand |1>NUL 2>&1 findstr /I /C:"CN=%%~c,"&&( 1>NUL 2>&1 NET USE %%a: %%b /PERSISTENT:NO))) :: Выполнение групповых скриптов IF EXIST "%~dp0sc_list.txt" ( FOR /F "usebackq tokens=1,2 eol=; delims=|" %%a IN (`TYPE "%~dp0sc_list.txt"^|FINDSTR /I ".cmd .bat"`) DO ( "%~dp0dsquery.exe" user -d "%USERDOMAIN%" -samid "%USERNAME%"|^ %~dp0dsget.exe user -memberof -expand |1>NUL 2>&1 findstr /I /C:"CN=%%~b,"&&( IF EXIST "%~dp0%%~a" CALL "%~dp0%%~a"))) :: Добавление пользовательских сетевых подключений IF EXIST "%~dp0%USERNAME%\rs_list.txt" ( FOR /F "usebackq tokens=1,2 eol=; delims=|" %%a IN (`TYPE "%~dp0%USERNAME%\rs_list.txt"^|FIND "\\"`) DO ( 1>NUL 2>&1 NET USE %%a: %%b /PERSISTENT:NO)) :: Выполнение пользовательских скриптов IF EXIST "%~dp0%USERNAME%\sc_list.txt" ( FOR /F "usebackq tokens=1 eol=; delims=|" %%a IN (`TYPE "%~dp0%USERNAME%\sc_list.txt"^|FIND /I ".cmd"`) DO ( IF EXIST "%~dp0%%~a" CALL "%~dp0%%~a")) ) EXIT 0