JScript
для поиска данных для переменных среды в объектах Active Directory
по протоколу LDAP
, в папке с ini
файлами или в csv
, tsv
файле. Основная задача скрипта найти, добавить в переменные среды данные по компьютеру или пользователю и используя эти переменные, выполнить необходимую команду в целях системного администрирования. Данные по компьютерам можно собрать с помощью другого скрипта env и выгрузить их в ini
файлы в папке или добавить в атрибуты объектов Active Directory
с помощью другого скрипта env.send.
В командной строке Windows введите следующую команду. Если необходимо скрыть отображение окна консоли, то вместо cscript
можно использовать wscript
.
cscript env.search.min.js [location] [<config>...] [\\ <filter>...] [\\ <input>...] [\\ <action>...]
<location>
- Путь к файлу, папке или url к источнику данных.- file - Получение данных из папки с
ini
файлами или изtsv
,csv
файла. - ldap - Получение данных из
Active Directory
(можно указатьguid
,cn
,dn
).
- file - Получение данных из папки с
<config>
- Конфигурационные параметры (может быть несколько, порядок не важен).- search - Поисковой запрос (можно опустить, будет запрошен в процессе).
- index - Номер объекта в выборке (можно опустить, будет запрошен в процессе).
- action - Ключ действия (можно опустить, будет запрошен в процессе).
- item - Шаблон представления объектов в выборке (доступны переменные
%ENV%
). - unit - Шаблон представления других списков (доступны переменные
%ENV%
). - service - Имя удалённой службы, которую нужно запустить перед выполнением действия.
- check - Флаг проверки доступности целевых компьютеров.
- user - Флаг запроса информации по пользователю (только для url схемы
ldap
). - noalign - Флаг запрета выравнивания выборок и списков.
- nowait - Флаг выполнения действия без ожидания (только при отсутствии
service
). - color - Флаг использования цветового оформления.
- repeat - Флаг повторения действия (при наличии
color
илиaction
безnowait
).
<filter>
- Фильтры по свойствам объекта (доступны wildcard шаблоны и объединения ключей).<input>
- Шаблоны для получения данных из свойств объекта (только для url схемыldap
).<action>
- Действия в формате ключ и команда или разделители (доступны переменные%ENV%
).
Поиск нужных объектов производится по значениям в ключах соответствующим фильтрам. В фильтрах можно использовать wildcard шаблоны, а также переменные SEARCH
и TRANSLIT
для подстановки поискового запроса и его транслитерации. Если указано несколько фильтров, то при поиске они объединяются оператором AND
. В одном фильтре можно задать несколько ключей, разделив их символом запятой, при поиске они объединяются оператором OR
.
Шаблоны задаются в формате VAL|VAL!NOT!NOT
, где VAL
разрешённые значения, а NOT
нет. Во всех значениях можно использовать подстановочный знак *
в начале и/или в конце значения. Синтаксис шаблонов для всех источников данных схож, но разные виды источников данных интерпретируют шаблоны чуть-чуть по-разному.
Если получение данных идёт для url схемы file
, то в шаблоне сначала нужно перечислить все разрешённые значения VAL
, а затем все запрещённые NOT
. Если после запрещённых значений указать разрешённые, то они игнорируются. Пустое значение интерпретируется как любое значение. Подстановочный знак *
можно пробывать использовать и в середине значения, но исчерпывающего тестирования поведения самописного парсера не проводилось.
Если получение данных идёт для url схемы ldap
, то шаблон конвертируется в LDAP
запрос в SQL диалекте. Разрешённые значения VAL
разделяются оператором OR
. Запрещённые значения добавляются через оператор AND
к разрешённому значению, за которым они следуют. Запрещённые и разрешённые значения можно комбинировать как угодно. Пустое значение заменяется на подстановочный знак *
. В качестве значений для ключей manager
, managedBy
, member
и memberOf
можно указывать не только distinguishedName
, но и guid
, cn
, sAMAccountName
интересующего объекта. Далее сконвертированный запрос отправляется на сервер для получения списка объектов.
Скрипт добавляет временные переменные в среду процесса. Для url схемы file
переменные добавляются по ключам из tsv
, csv
или ini
файла. Для url схемы ldap
переменные добавляются из свойств объектов по указанным подстановочным шаблонам. Для каждого свойства объекта можно задать шаблон, состоящий из переменных %ENV%
и разделителей. В одном шаблоне можно использовать разные разделители произвольного типа. Значение свойства раскладывается по переменным шаблона, если значение свойства пустое или не соответствует шаблону, то ни одна переменная из этого шаблона не создаётся.
Если задан конфигурационный параметр user, то по полученным переменным USR-NAME-FIRST
и USR-NAME-SECOND
дополнительно запрашиваются данные о пользователе. Помимо переменных из шаблонов, скрипт создаёт свои переменные. Если нет данных для формирования переменной, то переменная не создаётся. Если имя переменной оканчивается на -HIDE
, то отображение значения такой переменной скрывается, заменяется на ***
. При этом само значение переменной не затирается и может быть использовано в вызове действий.
NET-HOST
- Зарегистрированное сетевое имя компьютера.
USR-NAME
- Отображаемое имя пользователя.USR-LOGIN
- Часть логина в аккаунте пользователя.USR-ACCOUNT-DN
- ЗначениеDistinguished Name
пользователя в домене.USR-SID
- Идентификатор безопасности пользователя.USR-COUNTRY
- Название страны пользователя.USR-COUNTRY-ID
- Идентификатор страны пользователя.USR-CITY
- Название города пользователя.USR-COMPANY
- Название организации пользователя.USR-DEPARTMENT
- Название подразделения пользователя.USR-POSITION
- Название должности пользователя.USR-EMAIL
- Адрес электронной почты пользователя.USR-MOBILE
- Номер мобильного телефона пользователя.USR-PHONE
- Номер телефона пользователя.USR-HOME
- Полный путь к домашнему каталогу пользователя.USR-INFO
- Заметка о пользователе.
TMP-CHECK
- Время отклика компьютера на запрос проверки доступности.TMP-INDEX
- Порядковый номер компьютера в выборке (или элемента в списке).TMP-KEY
- Ключ элемента в списке.TMP-VALUE
- Значение элемента в списке.
Вывести предложение для ввода поискового запроса, номера компьютера и выбора последующего действия. Поиск осуществлять в Active Directory
в пределах Organizational Unit
c guid {ABCD1234-111B-14DC-ABAC-4578F1145541}
. Для отображаемой информации использовать оформление цветом, найденные компьютеры проверять на доступность и запрашивать информацию о пользователе. Что бы узнать guid контейнера в Active Directory
можно воспользоваться программой Active Directory Explorer.
cscript env.search.min.js ldap://{0C9E6295-C543-40D1-BD6D-3F2BDF54F7A9} color repeat check user item=" %TMP-INDEX% | %TMP-CHECK% | %NET-HOST% | %USR-NAME% | %USR-MOBILE% | %USR-INFO% | %DEV-NAME%" unit=" %TMP-INDEX% | %TMP-KEY% | %TMP-VALUE%" \\ objectClass="Computer" cn,description,operatingSystemVersion="*%SEARCH%*|*%TRANSLIT%*" \\ description="%USR-NAME-THIRD% | %USR-NAME-FIRST% %USR-NAME-SECOND% | %DEV-NAME% | %PCB-BIOS-SERIAL% | %PCB-BIOS-RELEASE-DATE% | %NET-MAC% | %DEV-BENCHMARK% | %DEV-DESCRIPTION%" \\ Помощник="msra.exe /offerRA %NET-HOST%" Подключится="mstsc.exe /v:%NET-HOST%" Доступность="ping.exe %NET-HOST%" Разбудить="wolcmd.exe %NET-MAC% 192.168.0.255 255.255.255.0" Сведения="msinfo32.exe /computer %NET-HOST%" Управление="compmgmt.msc /computer=%NET-HOST%"
Вывести предложение для ввода поискового запроса, номера компьютера и выбора последующего действия. Поиск осуществлять в папке с ini
файлами. Для отображаемой информации использовать оформление цветом.
cscript env.search.min.js "C:\Inventory" color repeat item=" %TMP-INDEX% | %NET-HOST% | %USR-NAME% | %DEV-DESCRIPTION%" unit=" %TMP-INDEX% | %TMP-KEY% | %TMP-VALUE%" \\ USR-NAME,NET-HOST,DEV-NAME="*%SEARCH%*|*%TRANSLIT%*" \\ Помощник="msra.exe /offerRA %NET-HOST%" Подключится="mstsc.exe /v:%NET-HOST%" Доступность="ping.exe %NET-HOST%" Разбудить="wolcmd.exe %NET-MAC% 192.168.0.255 255.255.255.0" Сведения="msinfo32.exe /computer %NET-HOST%" Управление="compmgmt.msc /computer=%NET-HOST%"
Сохранить в файл список всех компьютеров расположенных в Active Directory
в пределах Organizational Unit
c guid {ABCD1234-111B-14DC-ABAC-4578F1145541}
.
cscript /nologo search.min.js ldap://{ABCD1234-111B-14DC-ABAC-4578F1145541} search="" noalign \\ objectClass="Computer" > list.txt
Подключиться через TightVNC к первому найденному компьютеру по поисковому запросу Иванов
. Поиск осуществлять в Active Directory
в пределах Organizational Unit
c guid {ABCD1234-111B-14DC-ABAC-4578F1145541}
. Перед подключением на удалённом компьютере запустить службу с именем tvnserver
, а после отключения остановить её.
wscript env.search.min.js ldap://{0C9E6295-C543-40D1-BD6D-3F2BDF54F7A9} service=tvnserver search="Иванов" index=1 action=TightVNC \\ objectClass="Computer" cn,description="*%SEARCH%*" \\ TightVNC="tvnviewer.exe -host=%NET-HOST%"
Создать и вывести удобное меню из указанных команд. Команды разделить на группы с помощью заголовков.
cscript env.search.min.js color nowait unit=" %TMP-INDEX% | %TMP-KEY% | %TMP-VALUE%" \\ Мониторинг "Мониторинг процессов=ProcMon64.exe" "Диспетчер процессов=ProcExp64.exe" "Диспетчер задач=TaskMgr.exe" Администрирование "Командная строка=cmd.exe /k $PowerShell -NoLogo" "Редактор реестра=RegEdit.exe" Управление "Планировщик заданий=TasksChd.msc /s" "Управление питанием=ShutDown.exe /i" "Управление компьютером=CompMgmt.msc"