Единый логон-скрипт для AD

Моя попытка навести порядок и унификацию при подключении сетевых дисков в 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
Файлы: 
ВложениеРазмер
Файл logon_script.7z143.77 КБ

Комментарии

Аватар пользователя _SIL_

Класс. Большое спасибо.

Страницы

Похожие материалы по этой теме на сайте

Содержимое
Настройка TS Easy Print на сервере терминалов Windows Server 2012 R2

Технология TS Easy Print является альтернативой стандартной службе печати, появилась впервые в Windows Server 2008R2.

Поддержка папок для сканирования

Часто в офисе присутствуют сетевые устройства сканирования, которые поддерживают сканирование в сетевую папку. Все бы было хорошо если бы для этих устройств

Интерпретатор CMD - вывод переменных со спецсимволами на экран и в файл

Известная, но слабоосвещенная тема - обработка в коммандном интерпретаторе CMD данных со спецсимволами.
В большинстве ситуаций она вполне решаема...
Плюс к этому периодически возникают задачи вывода в файл без перевода строки....

Скрипты для CMD

Скрипты выполняемые интерпретатором CMD.EXE - стандартной консольной оболочкой для Win2000/WinXP/Vista/Seven/Win8/Win2000 Server/Win2003/Win2008.

Страховое копирование по списку

Относительно простой вариант резервного копирования по списку файлов/папок с учетом типа резервной копии и количества хранимых копий по типам. Классические типы: дневная-недельная-месячная-годовая копии. Кодировка скрипта CP866....

Преобразование файлов 1CClientBankExchange в табличную форму

Лично мне периодически приходилось сталкиваться с обработкой данных не в табличной форме, а в "именованном формате" то есть когда каждый параметр пишется на отдельной строке в виде Параметр=Значение параметра причем файл...

Чтение данных из реестра в переменную окружения

Продвинутый кросплатформенный модуль для встраивания в скрипты, позволяющий в удобной форме получать данные из реестра для дальнейшего использования(как всегда - кодировка скрипта CP866):

Перевод столбца в строку

Преобразование столбца в строку с заданными разделителями и обрамлением. Кодировка скрипта CP866.
Символ двойной кавычки при этом не удастся использовать как разделитель или обрамление.