Как-то давно на хабре публиковалась статья Опытные мелочи Windows-админа. В ней рассказывалось как быстро и достаточно эффективно находить компьютеры на которых залогинился тот или иной пользователь.

Мне эта идея понравилась, т.к. всё делается достаточно просто, быстро и без модификации схемы Active Directory. Я постепенно улучшал изложенные в статье подходы и в итоге появились три скрипта, которыми я и хочу поделится с вами.

env – с помощью этого скрипта получаем данные по компьютеру и добавляем эти данные во временные переменные среды.
env.send – с помощью этого скрипта данные из переменных среды передаём в описание компьютера в Active Directory.
env.search – с помощью этого скрипта ищем нужный нам компьютер в Active Directory и подключаемся к нему.
На самом деле скрипты более универсальные и с помощью них можно делать не только изложенные выше действия, а например:

Можно делать инвентаризацию компьютеров по сети в csv файл или в папку с ini файлами.
При отсутствии Active Directory можно по данным из переменных среды автоматически создавать ярлычок, который в своём названии будут содержать нужные данные по компьютеру, а при клике подключатся к нему или делать другое полезное системному администратору действие.
Поиск нужных компьютеров можно выполнять не только в Active Directory, но и в простом хранилище в виде папки с ini файлами.
А так же можно использовать временные переменные среды в других скриптах, например для установки программного обеспечения нужной разрядности и т.д.
Ниже привожу описание всех скриптов, что бы можно было более детально ознакомится с их возможностями. Надеюсь что они будут вам полезны, так же как мне. Сами скрипты и их исходные коды доступны в моём профиле на GitHub.
env
Описание
JScript для добавления в переменные среды временных переменных. Которые затем можно использовать в вызове других скриптов и приложений. Данные для переменных получаются через WMI с локального или удалённого компьютера в сети. Дополнительно переменные можно импортировать из файла и экспортировать в файл, поддерживается несколько форматов.
Достаточно часто системному администратору требуется получить общую информацию о компьютере и пользователе, чтобы затем её использовать в вызове другого скрипта или приложений. А также эту информацию иногда требуется сохранить в файл, например для инвентаризационного учёта или для использования в дальнейшем. Данный скрипт предоставляет такие возможности.
Использование
В командной строке Windows введите следующую команду. Все параметры можно передавать в произвольном порядке. Если необходимо скрыть отображение окна консоли, то вместо cscript можно использовать wscript.
cscript env.min.js [\\<context>] [<input>@<charset>] [<output>] [<option>...] ...
<context>- Сетевое имя или ip адрес компьютера, в контексте которого нужно получить данные для переменных.-
<input>- Формат текстовых данных стандартного потока ввода для импорта переменных.ini - Получает из потока данные для переменных в
iniформате.csv - Получает данные в
csvформате (заглавное написание ожидает ещё и заголовок).tsv - Получает данные в
tsvформате (заглавное написание ожидает ещё и заголовок).
<charset>- Кодировка текстовых данных, направленных в стандартный поток ввода (можно использовать значениеauto).-
<output>- Формат текстовых данных стандартного потока вывода для экспорта переменных.ini - Отправляет в поток данные переменных в
iniформате.csv - Отправляет данные в
csvформате (заглавное написание добавляет ещё и заголовок).tsv - Отправляет данные в
tsvформате (заглавное написание добавляет ещё и заголовок).
-
<option>- Дополнительные опции (можно указать несколько).silent - Последующие команды выполнить без отображения.
nowait - Последующие команды выполнить без ожидания.
...- Далее указывается командная строка для выполнения, в которой будут доступны эти переменные среды.
Переменные среды
Скрипт добавляет описанные ниже временные переменные в среду процесса. Если нет данных для формирования переменной, то переменная не создаётся.
Операционная система
SYS-ARCHITECTURE- Архитектура операционной системыx64иx86.SYS-DESCRIPTION- Описание системы (компьютера), заданное пользователем.SYS-DRIVE- Буква системного диска (вместе с двоеточием).SYS-INSTALL- Дата и время установки системы в форматеДД.ММ.ГГГГ ЧЧ:ММ:СС.SYS-INSTALL-DATE- Только дата установки системы в форматеДД.ММ.ГГГГ.SYS-KEY- Ключи активации операционной системы.SYS-NAME- Заданное производителем полное название операционной системы.SYS-RESET- Дата и время перезагрузки системы в форматеДД.ММ.ГГГГ ЧЧ:ММ:СС.SYS-RESET-DATE- Только дата перезагрузки системы в форматеДД.ММ.ГГГГ.SYS-SERIAL- Серийный номер операционной системы.SYS-TIME- Текущая дата и время в системе в форматеДД.ММ.ГГГГ ЧЧ:ММ:СС.SYS-TIME-DATE- Только текущая дата в системы в форматеДД.ММ.ГГГГ.SYS-VERSION- Версия операционной системы.
Пользователь
USR-ACCOUNT- Аккаунт пользователя, который последним использовал компьютер.USR-DOMAIN- Доменная часть аккаунта пользователя.USR-LOGIN- Часть логина в аккаунте пользователя.USR-HOME- Полный путь к домашнему каталогу пользователя.USR-PROFILE- Полный путь к папке профиля пользователя.USR-NAME- Отображаемое имя пользователя.USR-NAME-FIRST- Первая часть отображаемого имени пользователя.USR-NAME-SECOND- Втор часть отображаемого имени пользователя.USR-NAME-THIRD- Третья часть отображаемого имени пользователя.USR-NAME-FOURTH- Четвёртая часть отображаемого имени пользователя.USR-SID- Идентификатор безопасности пользователя.
Компьютер
DEV-NAME- Заданное производителем полное название модели.DEV-DESCRIPTION- Формируемое скриптом описание компьютера из его характеристик.DEV-BENCHMARK- Вычисляемый скриптом рейтинг производительности компьютера.
Материнская плата
PCB-NAME- Заданное производителем полное название модели.PCB-SERIAL- Серийный номер материнской платы.PCB-BIOS-MANUFACTURE- Название производителя BIOS материнской платы.PCB-BIOS-RELEASE- Дата и время прошивки BIOS материнской платы.PCB-BIOS-RELEASE-DATE- Только дата прошивки BIOS материнской платы.PCB-BIOS-SERIAL- Серийный номер, хранящийся в BIOS материнской платы.PCB-BIOS-VERSION- Версия прошивки BIOS материнской платы.
Центральный процессор
CPU-ARCHITECTURE- Архитектура центрального процессораx64иx86.CPU-CACHE-L1- Размер L1 кэша с размерностьюКБ,МБи так далее.CPU-CACHE-L2- Размер L2 кэша с размерностьюКБ,МБи так далее.CPU-CACHE-L3- Размер L3 кэша с размерностьюКБ,МБи так далее.CPU-CORE- Количество ядер центрального процессора.CPU-NAME- Заданное производителем полное название модели.CPU-SOCKET- Название сокета центрального процессора.CPU-SPEED- Тактовая частота с размерностьюМГц,ГГци так далее.CPU-SPEED-VAL- Значение тактовой частота вгерцах.CPU-VERSION- Версия релиза центрального процессора.
Оперативная память
RAM-SIZE- Объём оперативной памяти с размерностьюМБ,ГБи так далее.RAM-SIZE-VAL- Значение объёма оперативной памяти вбайтах.RAM-SPEED- Тактовая частота с размерностьюМГц,ГГци так далее.RAM-SPEED-VAL- Значение тактовой частота вгерцах.
Графический процессор
GPU-COLOR- Глубина цвета графического процессора с размерностью вбитах.GPU-COLOR-VAL- Значение глубины цвета графического процессора вбитах.GPU-FREQUENCY- Частота обновления с размерностью вГц.GPU-FREQUENCY-VAL- Значение частота обновления вгерцах.GPU-NAME- Заданное производителем полное название модели.GPU-RESOLUTION- Разрешение экрана, подключенного к графическому процессору.GPU-RESOLUTION-X- Разрешение экрана по горизонтали.GPU-RESOLUTION-Y- Разрешение экрана по вертикали.GPU-SIZE- Объём памяти с размерностьюМБ,ГБи так далее.GPU-SIZE-VAL- Значение объёма памяти графического процессора вбайтах.GPU-VERSION- Версия драйвера графического процессора.
Сетевой адаптер
NET-IP-V4- IPv4 адрес активного сетевого адаптера.NET-IP-V6- IPv6 адрес активного сетевого адаптера.NET-SUBNET-V4- IPv4 маска подсети активного сетевого адаптера.NET-SUBNET-V6- IPv6 маска подсети активного сетевого адаптера.NET-GATEWAY-V4- IPv4 шлюз активного сетевого адаптера.NET-GATEWAY-V6- IPv6 шлюз активного сетевого адаптера.NET-DNS-V4- IPv4 адрес DNS сервера сетевого адаптера.NET-DNS-V6- IPv6 адрес DNS сервера сетевого адаптера.NET-DHCP-V4- IPv4 адрес DHCP сервера локальной сети.NET-DOMAIN- Домен в котором зарегистрирован компьютер.NET-HOST- Зарегистрированное сетевое имя компьютера.NET-HOST-DN- ЗначениеDistinguished Nameкомпьютера в домене.NET-MAC- Физический адрес активного сетевого адаптера.NET-NAME- Заданное производителем название сетевого адаптера.NET-RESET- Дата и время обновления адресов в форматеДД.ММ.ГГГГ ЧЧ:ММ:СС.NET-RESET-DATE- Только дата обновления адресов в форматеДД.ММ.ГГГГ.NET-SPEED- Скорость подключения с размерностьюМбит/с,Гбит/си так далее.NET-SPEED-VAL- Значение скорость подключения вбитахвсекунду.
Жёсткий диск
HDD-NAME- Заданное производителем название жёсткого диска.HDD-SERIAL- Серийный номер жёсткого диска.HDD-SIZE- Объём жёсткого диска с размерностьюМБ,ГБи так далее.HDD-SIZE-VAL- Значение объёма жёсткого диска вбайтах.HDD-VERSION- Версия прошивки жёсткого диска.
Твердотельный накопитель
SSD-NAME- Заданное производителем название твердотельного накопителя.SSD-SERIAL- Серийный номер твердотельного накопителя.SSD-SIZE- Объём твердотельного накопителя с размерностьюМБ,ГБи так далее.SSD-SIZE-VAL- Значение объёма твердотельного накопителя вбайтах.SSD-VERSION- Версия прошивки твердотельного накопителя.
Сменный накопитель
USB-NAME- Заданное производителем название сменного накопителя.USB-SERIAL- Серийный номер сменного накопителя.USB-SIZE- Объём сменного накопителя с размерностьюМБ,ГБи так далее.USB-SIZE-VAL- Значение объёма сменного накопителя вбайтах.USB-VERSION- Версия прошивки сменного накопителя.
Специализированный накопитель
SCM-NAME- Заданное производителем название специализированного накопителя.SCM-SERIAL- Серийный номер специализированного накопителя.SCM-SIZE- Объём специализированного накопителя с размерностьюМБ,ГБи так далее.SCM-SIZE-VAL- Значение объёма специализированного накопителя вбайтах.SCM-VERSION- Версия прошивки специализированного накопителя.
Оптический привод
ROM-NAME- Заданное производителем название оптического привода.ROM-DRIVE- Буква оптического привода (вместе с двоеточием).ROM-TYPE- Тип оптического приводаDVD-RW,CDи так далее.
Программное обеспечение
Браузер Google Chrome
APP-CHROME- Полный путь исполняемого файла приложения.APP-CHROME-DIR- Полный путь каталога приложения.
Проигрыватель VLC Media Player
APP-VLC- Полный путь исполняемого файла приложения.APP-VLC-DIR- Полный путь каталога приложения.
Приложение Spargo eFarma
APP-EFARMA-CLIENT- Полный путь исполняемого файла клиента.APP-EFARMA-CASHER- Полный путь исполняемого файла кассы.APP-EFARMA-UPDATER- Полный путь исполняемого файла сервера обновлений.APP-EFARMA-LICENSE- Полный путь файла лицензии.APP-EFARMA-DIR- Полный путь каталога приложения.
Приложение SoftLine Ulus
APP-ULUS- Полный путь исполняемого файла приложения.APP-ULUS-DIR- Полный путь каталога приложения.
Приложение TeamViewer
APP-TEAMVIEWER-ID- Идентификатор компьютера.
Другие переменные
BAK-DRIVE- Буква диска для резервных копий (вместе с двоеточием).
Примеры использования
Получение данных
Вывести в консоль все созданные переменные среды в контексте текущего компьютера.
cscript env.min.js ini
Вывести в консоль все созданные переменные среды в контексте компьютера RUS000WS001.
cscript env.min.js ini \\RUS000WS001
Экспорт данных
Экспортировать все созданные переменные среды в ini файл с кодировкой CP 866 в контексте текущего компьютера.
cscript /nologo env.min.js ini > %COMPUTERNAME%.ini
Экспортировать все созданные переменные среды в ini файл с кодировкой UTF-16 LE в контексте текущего компьютера.
cscript /nologo /u env.min.js ini > %COMPUTERNAME%.ini
Экспортировать все созданные переменные среды в csv файл без заголовка и с кодировкой UTF-16 LE в контексте компьютера RUS000WS001.
cscript /nologo /u env.min.js \\RUS000WS001 csv > RUS000WS001.csv
Экспортировать все созданные переменные среды в csv файл с заголовком и с кодировкой UTF-16 LE в контексте компьютера RUS000WS001.
cscript /nologo /u env.min.js \\RUS000WS001 CSV > RUS000WS001.csv
Импорт данных
Импортировать переменные среды из ini файла с кодировкой CP 866 и вывести их в консоль.
cscript /nologo env.min.js ini@cp866 \\ ini < %COMPUTERNAME%.ini
Импортировать переменные среды из ini файла с кодировкой UTF-16 LE и затем ещё и получить переменные среды в контексте компьютера RUS000WS001 и вывести их в консоль.
cscript /nologo /u env.min.js ini@auto \\RUS000WS001 ini < RUS000WS001.ini
Импортировать переменные среды из csv файла с заголовком и с кодировкой UTF-16 LE и затем ещё и получить переменные среды в контексте компьютера RUS000WS001 и вывести их в консоль.
cscript /nologo /u env.min.js CSV@auto \\RUS000WS001 ini < RUS000WS001.csv
Использование данных
Выполнить тихую установку msi пакета с именем, соответствующим разрядности операционной системы текущего компьютера.
cscript env.min.js %SYS-ARCHITECTURE%.msi /quiet /qn /norestart
Открыть в VLC Media Player воспроизведение mp4 видео файла с именем, соответствующим логину пользователя и не дожидаться окончания воспроизведения.
wscript env.min.js nowait "%APP-VLC%" %USR-LOGIN%.mp4
Открыть в Проводнике домашний каталог пользователя, который последним использовал удалённый компьютер RUS000WS001.
wscript env.min.js \\RUS000WS001 explorer.exe "%USR-HOME%"
Инвентаризация компьютеров
Загрузить из txt файла список компьютеров и сохранить о них информацию в папке inventory в виде ini файлов.
for /f "eol=; tokens=* delims=, " %%i in (list.txt) do (
cscript /nologo /u env.min.js \\%%i ini > inventory\%%i.ini
)
Загрузить из txt файла список компьютеров и сохранить о них информацию в один csv файл с заголовком.
cscript /nologo /u env.min.js \\ CSV > inventory.csv
for /f "eol=; tokens=* delims=, " %%i in (list.txt) do (
cscript /nologo /u env.min.js \\%%i csv >> inventory.csv
)
Сконвертировать и объединить ini файлы из папке inventory в один tsv файл с заголовком.
cscript /nologo /u env.min.js \\ TSV > inventory.tsv
for %%i in (inventory\*.ini) do (
cscript /nologo /u env.min.js \\ ini@auto tsv < %%i >> inventory.tsv
)
env.send
Описание
JScript для отправки переменных среды в объект Active Directory по протоколу LDAP или в файл ярлыка в папке. Основная задача скрипта сохранить собранные данные с помощью другого скрипта env в любой атрибут (или атрибуты) объекта Active Directory или на основании этих данных создать по шаблону ярлык в папке. Чтобы затем использовать этот ярлык или данные из Active Directory в целях системного администрирования.
Использование
В командной строке Windows введите следующую команду. Если необходимо скрыть отображение окна консоли, то вместо cscript можно использовать wscript.
cscript env.send.min.js <mode> <container> [<output>...] \\ [<input>...]
-
<mode>- Режим отправки переменных (заглавное написание выполняет только эмуляцию).link - Отправляет переменных среды в обычный ярлык.
ldap - Отправляет переменных среды в объект
Active Directory.
<container>- Путь к папке илиguid(допускается указание пустого значения).<output>- Изменяемые свойства объекта в форматеkey=valuec подстановкой переменных%ENV%. Первое свойство считается обязательным, т.к. по его значению осуществляется поиск объектов. Для режима link обязательно наличие свойствnameиtargetpath, а в свойствеargumentsодинарные кавычки заменяются на двойные.<input>- Значения по умолчанию для переменных среды в форматеkey=value.
Примеры использования
Предполагается использовать данный скрипт совместно с другим скриптом env, поэтому сразу в примерах будут использоваться два скрипта.
Когда компьютер в домене, то в групповых политиках при входе пользователя в компьютер, можно прописать следующий скрипт, что бы информация о компьютере и пользователе прописалась в атрибуты описания и местоположения компьютера в Active Directory в пределах Organizational Unit c guid {ABCD1234-111B-14DC-ABAC-4578F1145541}. Что бы затем быстро находить нужный компьютер пользователя или анализировать собранную информацию. Что бы узнать guid контейнера в Active Directory можно воспользоваться программой Active Directory Explorer. Так же не забудьте пользователям выдать права на изменения нужных атрибутов компьютеров в соответствующем контейнере.
wscript env.min.js wscript env.send.min.js ldap {ABCD1234-111B-14DC-ABAC-4578F1145541} cn="%NET-HOST%" 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%" location="%USR-NAME-THIRD%" \\ USR-NAME-FIRST="Terminal" USR-NAME-SECOND="login" USR-NAME-THIRD="Location" PCB-BIOS-RELEASE-DATE="XX.XX.XXXX" NET-MAC="XX:XX:XX:XX:XX:XX"
Когда компьютер не в домене то в планировщике задач, можно прописать следующий скрипт, чтобы информация о компьютере и пользователе сохранялась в виде ярлычка в сетевой папке. И затем использовать эти ярлычки чтобы одним кликом разбудить WOL пакетом нужный компьютер и подключится к нему через Помощник для оказания технической поддержки. Для отправки WOL пакета можно использовать утилиту Wake On Lan.
wscript env.min.js wscript env.send.min.js link \\server\links name="%NET-HOST% - %USR-NAME-FIRST% %USR-NAME-SECOND% ! %DEV-NAME% ! %PCB-BIOS-SERIAL% ! %PCB-BIOS-RELEASE-DATE% ! %DEV-BENCHMARK%" targetPath="%WINDIR%\System32\cmd.exe" arguments="/c wolcmd.exe %NET-MAC% 192.168.0.255 255.255.255.0 & start msra.exe /offerRA %NET-HOST%" workingDirectory="C:\Scripts" windowStyle=7 iconLocation="%WINDIR%\System32\msra.exe,0" description="%USR-NAME-THIRD%" \\ USR-NAME-FIRST="Terminal" USR-NAME-SECOND="login" PCB-BIOS-RELEASE-DATE="XX.XX.XXXX" NET-MAC="XX:XX:XX:XX:XX:XX"
Когда компьютер не в домене, но есть административная учётная запись от всех компьютеров, можно выполнить следующий скрипт, чтобы загрузить из txt файла список компьютеров, получить о них информация по сети через WMI и создать аналогичные ярлычки в локальной папке.
for /f "eol=; tokens=* delims=, " %%i in (list.txt) do cscript /nologo /u env.min.js \\%%i silent cscript env.send.min.js link C:\Links name="%NET-HOST% - %USR-NAME-FIRST% %USR-NAME-SECOND% ! %DEV-NAME% ! %PCB-BIOS-SERIAL% ! %PCB-BIOS-RELEASE-DATE% ! %DEV-BENCHMARK%" targetPath="%WINDIR%\System32\cmd.exe" arguments="/c wolcmd.exe %NET-MAC% 192.168.0.255 255.255.255.0 & start msra.exe /offerRA %NET-HOST%" workingDirectory="C:\Scripts" windowStyle=7 iconLocation="%WINDIR%\System32\msra.exe,0" description="%USR-NAME-THIRD%" \\ USR-NAME-FIRST="Terminal" USR-NAME-SECOND="login" PCB-BIOS-RELEASE-DATE="XX.XX.XXXX" NET-MAC="XX:XX:XX:XX:XX:XX"
Или можно сделать то же самое, что в предыдущем примере, но разбить всё на два этапа. Сначала получить данные с компьютеров по сети через WMI и сохранить их в локальной папке. А затем на основании этих данных создать аналогичные ярлычки в другой локальной папке.
for /f "eol=; tokens=* delims=, " %%i in (list.txt) do cscript /nologo /u env.min.js \\%%i > C:\Inventory\%%i.ini
for /f "eol=; tokens=* delims=, " %%i in (list.txt) do cscript /u env.min.js ini@auto silent \\ cscript env.send.min.js link C:\Links name="%NET-HOST% - %USR-NAME-FIRST% %USR-NAME-SECOND% ! %DEV-NAME% ! %PCB-BIOS-SERIAL% ! %PCB-BIOS-RELEASE-DATE% ! %DEV-BENCHMARK%" targetPath="%WINDIR%\System32\cmd.exe" arguments="/c wolcmd.exe %NET-MAC% 192.168.0.255 255.255.255.0 & start msra.exe /offerRA %NET-HOST%" workingDirectory="C:\Scripts" windowStyle=7 iconLocation="%WINDIR%\System32\msra.exe,0" description="%USR-NAME-THIRD%" \\ USR-NAME-FIRST="Terminal" USR-NAME-SECOND="login" PCB-BIOS-RELEASE-DATE="XX.XX.XXXX" NET-MAC="XX:XX:XX:XX:XX:XX" < C:\Inventory\%%i.ini
env.search
Описание
JScript для поиска данных для переменных среды в объектах Active Directory по протоколу LDAP или в папке с ini файлами. Основная задача скрипта найти, добавить в переменные среды данные по компьютеру и используя эти переменные, выполнить необходимую команду в целях системного администрирования. Данные по компьютерам можно собрать с помощью другого скрипта env и выгрузить их в ini файлы в папке или добавить в атрибуты объектов Active Directory с помощью другого скрипта env.send.
Использование
В командной строке Windows введите следующую команду. Если необходимо скрыть отображение окна консоли, то вместо cscript можно использовать wscript.
cscript env.search.min.js <mode> <container> [<option>...] [<input>...] \\ [<action>...]
-
<mode>- Режим поиска данных для переменных среды.folder - Получение данных из папки с
iniфайлами.ldap - Получение данных из
Active Directory.
<container>- Путь к папке илиguid(допускается указание пустого значения).-
<option>- Дополнительные опции (может быть несколько, порядок не важен).search - Поисковой запрос (можно опустить, будет запрошен в процессе).
index - Номер компьютера в выборке (можно опустить, будет запрошен в процессе).
action - Ключ действия (можно опустить, будет запрошен в процессе).
item - Шаблон представления компьютеров в выборке (доступны переменные
%ENV%).unit - Шаблон представления других списков (доступны переменные
%ENV%).service - Имя службы, которую нужно запустить перед выполнением команды действия.
check - Флаг проверки доступности целевых компьютеров.
user - Флаг запроса информации по пользователю (только для режима
ldap).noalign - Флаг запрета выравнивания выборок и списков.
color - Флаг использования цветового оформления.
<input>- Шаблоны для получения данных из атрибутов объекта (только для режимаldap).<action>- Действия в формате ключ и команда (доступны переменные%ENV%).
Поиск объектов
Если получение данных идёт в режиме folder, то поиск нужных объектов в ini файлах производится по следующим ключам: NET-MAC, SYS-KEY, NET-HOST, DEV-NAME, NET-IP-V4, SYS-VERSION, USR-ACCOUNT, DEV-DESCRIPTION, PCB-BIOS-SERIAL, PCB-BIOS-SERIAL и USR-NAME, причём по последнему ключу поисковой запросе ещё проверяется в транслитерации.
Если получение данных идёт в режиме ldap, то поиск нужных объектов производится по следующим атрибутам: name, operatingSystemVersion и description, причём по последнему атрибуту поисковой запросе ещё проверяется в транслитерации.
Переменные среды
Скрипт добавляет временные переменные в среду процесса. В режиме folder переменные добавляются по ключам в ini файле. В режиме ldap добавляются описанные ниже переменные. Если нет данных для формирования переменной, то переменная не создаётся. Если задана дополнительная опция user, то по ключам USR-NAME-FIRST и USR-NAME-SECOND дополнительно запрашиваются данные о пользователе. Применяя шаблоны для получения данных из атрибутов объекта, можно получить любые данные и добавить их в любые переменные. Причём данные из одного атрибута по шаблону можно разделить на несколько переменных.
Операционная система
SYS-NAME- Заданное производителем полное название операционной системы.SYS-VERSION- Версия операционной системы.
Пользователь
USR-NAME- Отображаемое имя пользователя.USR-ACCOUNT- Аккаунт пользователя.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- Заметка о пользователе.
Сетевой адаптер
NET-HOST- Зарегистрированное сетевое имя компьютера.NET-HOST-DN- ЗначениеDistinguished Nameкомпьютера в домене.
Другие переменные
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 check user item=" %TMP-INDEX% | %TMP-CHECK% | %NET-HOST% | %USR-NAME% | %USR-MOBILE% | %USR-INFO% | %DEV-NAME%" unit=" %TMP-INDEX% | %TMP-KEY% | %TMP-VALUE%" 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 folder "C:\Inventory" color item=" %TMP-INDEX% | %NET-HOST% | %USR-NAME% | %DEV-DESCRIPTION%" unit=" %TMP-INDEX% | %TMP-KEY% | %TMP-VALUE%" \\ Помощник="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 > 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 \\ TightVNC="tvnviewer.exe -host=%NET-HOST%"
Комментарии (6)

Protos
21.09.2021 17:03Осталось зарезать права в домене, что бы хакер получивший доступ в домен под простым юзером не смог видеть это:


Aggron
21.09.2021 19:12Делал нечто похожее, на базе winforms, основная боль, которая устранялась — более удобный поиск среди объектов AD с учётом атрибутов (там мог залежаться номер телефона), и возможность перейти к редактированию этого самого атрибута, т.е. открывалась оснастка dca.msc с найденным объектом в качестве аргумента (в обычном режиме, даже если мы нашли нужный объект и переходим к нему из поиска, вкладка «атрибуты» недоступна). Также, можно было из результатов поиска вызывать скрипты, которые позволяли, сбросить пароль пользователя на стандартный, разблокировать учётку, либо выполнить скрипт по отключению учётки. В планах было это развивать, интегрировать с другими скриптами, допиливать GUI, но ушел из компании. Возможно, я бы написал об этом, но сейчас мне будет стыдно за код, написанный более 3х лет назад

Sergey-S-Kovalev
Впечатляет.
Лишь замечу, что пользователь/компьютер не имеют права писать в атрибут "description" с пользовательскими правами, но могут в "info", что сильно упрощает сбор данных на местах.