Срочная инвентаризация. Или хочу всё знать
Захотелось поделится с хабросообществом парой способов провести инвентаризацию техники быстро и без особых усилий. Сподвигла меня вот эта статья, но как сторонник UNIX-way я расскажу способы сделать всё то же самое и даже больше без необходимости окружать себя гомогенной сетью из одинаковых рабочих станций или привязки к одной технологии.
Что мы хотим?
Мы хотим сделать перепись имеющегося оборудования в зависимости от требований руководства или наших собственных порывов обладать исчерпывающей информацией о своих владениях.
Я не буду претендовать на исчерпывающее руководство, но пару быстрых способов я подскажу.
Способ первый, без затрат.
Хотим мы получить инфу о начинке системных блоков организации, например для составления плана модернизации. Вы слышали про встроенную в Windows команду SYSTEMINFO? А она очень полезная. Даст вам информацию о всей системе в удобоваримом виде:
- Создаём шару с правами на запись всем подряд, а то мало ли какие урезанные права у рабочих станций (sic! Именно станций, потому как права пользователей этих станций нам не интересны, всё будем делать от своего имени). Ну например \\share\audit\
- Рисуем файлик в нашими айпишниками. Дело в том, что psexec по неясным причинам не понимает диапазоны адресов типа 192.168.0.1-192.168.0.254 или 192.168.0.0/24. Его, конечно, можно обмануть и подсунуть подобное, но это не стабильно и вредно, ниже объясню почему. Я пользуюсь OO Calc для создания списка IP-адресов. В итоге получаем текстовик (.txt) с примерно таким содержимым:
192.168.0.1 192.168.0.2 . 192.168.0.254
psexec.exe @c:\ip-list.txt -d -n 12 systeminfo > \\share\audit\%COMPUTERNAME%.txt
- Тут информация только по содержимому коробки системного блока и чуть-чуть по Windows.
- Хотя установленные программы хранятся внутри системного блока про них тоже ничего не выводится
- Даже по внутренностям мало информации, например нет ничего про тип оперативной памяти, только объём. Да и процессор освещён весьма скудно.
Хочу ВСЁ знать
И когда уже недостаточно только отчёта встроенной утилиты на помощ приходит AIDA64 от FinalWire. это тот же EVEREST только уже купленный другой компанией и которому было возвращено историческое название.
В принципе можно обойтись покупкой Business Edition и установкой на все станции. потом разрешить им обмениваться информацией и подключатся друг к другу на коком-нибудь порту, после чего клепать отчёты из приятного интерфейса. Но, во-первых это не тру, а во-вторых с автоматизацией процесса могут возникнуть заминки.
Я обхожусь Extreme Edition, всё то же самое но без сетевых отчётов.
Что бы начать вкушать плоды автоматизации нужно несколько несложных операций.
- Повторяем этапы подготовки для Systeminfo
- Ставим AIDA64
- Копируем папку с установленной AIDA64 из Program Files куда-нибудь на общедоступную шару. Например \\share\audit\aida
- В AIDA идём в мастер отчётов
Пункт «По выбору пользователя»
И здесь выбираем нужную нам информацию.
ReportProfile="Custom" ProfileFile="\\share\audit\aida\aida64.rpf" ReportFormat="txt" (не важный параметр, мы будем его подменять в консоли) RemoteReportFolder="C:\Users\***\Documents\AIDA64 Reports" (не важный параметр, мы будем его подменять в консоли) RemoteReportFileName="$HOSTNAME" (не важный параметр, мы будем его подменять в консоли) InfoPage="Computer;Summary" InfoPage="Computer;Computer Name" InfoPage="Computer;DMI" InfoPage="Computer;Sensor" InfoPage="Motherboard;CPU" InfoPage="Motherboard;CPUID" InfoPage="Motherboard;Motherboard" InfoPage="Motherboard;Memory" InfoPage="Motherboard;Chipset" InfoPage="Motherboard;BIOS" InfoPage="Operating System;Operating System" InfoPage="Server;Share" InfoPage="Server;Opened Files" InfoPage="Display;Windows Video" InfoPage="Display;GPU" InfoPage="Display;Monitor" InfoPage="Storage;Logical Drives" InfoPage="Storage;Physical Drives" InfoPage="Network;Windows Network" InfoPage="Software;Installed Programs"
psexec.exe @c:\ip-list.txt -d -n 12 \\share\audit\aida\aida64.exe /R \\share\audit\%COMPUTERNAME% /TEXT /CUSTOM \\share\audit\aida\aida64.rpf
Параметр /R — означает что аида не будет выводить отчёт на экран, а будет складывать его по указанному пути. %computername% — это переменная окружения cmd и на каждом компьютере где мы будем запускать Aida она будет соответствовать имени компьютера. Можно использовать любую другую переменную, но так удобнее всего.
Параметр /TEXT — предопределит тип создаваемого отчёта и автоматически подставит нужное расширение файла, поэтому после %computername% не нужно ставить .txt (%computername%.txt) иначе получим %computername%.txt.txt
Параметр /CUSTOM — даёт понять AIDA откуда брать список нужных компонентов отчёта.
Вот и всё. Запускаем эту строку в CMD и смотрим как в шару складываются очень подробные отчёты включающие в себя полную информацию по всей периферии.
В домене
Я добавил исполнение этого скрипта (без части с psexec) в Startup Scripts в политиках домена.
Это было бы не правильно без некоторой доработки, в итоге скрипт в политиках выглядит так:
if not exist \\share\audit\%COMPUTERNAME%.txt ( \\share\audit\aida\aida64.exe /R \\share\audit\%COMPUTERNAME% /TEXT /CUSTOM \\share\audit\aida\aida64.rpf ) else exit
Благодаря этому, при загрузке, каждый компьютер в сети проверяет, посылал ли он отчёт и если нет, то делает его, а если да, то не делает ничего.
А для того что бы обнавить данные по одной или нескольким машинам, я просто удаляю или переношу соответствующие очёты и через некоторое время у меня свежая инфа.
Внимание: на некоторых экзотических аппаратных платформах (которые AIDA не распознаёт) отработка программы вызывает сбои и даже падения, редкость, но имеет место. По этому на критически важных рабочих станциях и серверах отчёты лучше делать вручную. Полноценно запуская AIDA64 в графическом режиме, тогда компьютер не выдаёт ошибок, а AIDA просто не запускается.
Разбор полученных логов
Я сохраняю отчёты в простом текстовом виде так как пользуюсь для их разбора и анализа bash скрипты, а шара для хранения отчётов хранится на linux машине. По этому если я хочу узнать обо всех машинах: их имя,ip и mac, количество установленной памяти, то делается примерно следующее:
iconv -f cp1251 ./*.txt | egrep -i "Имя компьютера|с ip|с mac|Тип ЦП|Системная память"
Это простейшая обработка, но когда освою парсинг XML на каком-нибудь языке, конечно перейду на отчёты в этом формате.
Лирика
Можно обсудить ещё и возможность удалённого включения рабочих станция, да и управление компьютерами по сети не последний вопрос. Но ничего универсальнее Wake On Lan ещё не изобрели, а многообразие средств удалённого управление столь велико, что не уместится в рамки этой статьи. Тем более это дело вкуса.
UDP: Neuronix подсказал про OCS NG + GLPI. Красивый и удобный сервер под *nix c поддержкой графиков и отчётов + клиентские части под все возможные ОС. У меня, правда, возникли проблемы с клиентами под Windows 7, но возможно от неестественной кривизны рук. Решение стационарное, нужен какой-нибудь сервер.
UDP2: Да AIDA64 платная, но нам вполне хватит триала, по части консольного использования ничем не ограниченного.
UDP3: Решение с AIDA64 полностью portable. Скинуть всё необходимое на флешку, использовать относительные пути в скриптах и по приходу в любую фирму понадобится только компьютер и права админа.
GLPI + Fusion Inventory
Идем на созданный сайт(http:///glpi/) и выбираем язык установки Russian, а дальше там всё понятно.
Устанавливаем FusionInventory (сервер)
# cd ~ # fetch http://forge.fusioninventory.org/attachments/download/120/fusioninventory-for-glpi-2.2.2-release.tar.gz # cd /usr/local/www/glpi/plugins/ # rm remove.txt # tar -xzvf /root/fusioninventory-for-glpi-2.2.2-release.tar.gz
|--- glpi |--- plugins |--- fusioninventory |--- fusioninventory | |--- index.php | |--- hook.php | |--- front | |--- inc | |--- fusininventory | |--- . | |--- fusinvsnmp |--- . etc.
Устанавливаем FusionInventory (клиент)
Скачиваем и устанавливаем клиент:
forge.fusioninventory.org/projects/fusioninventory-agent/wiki/Agent_supportedplateforms
При установке указываем путь к серверу(у Win версии настройки задаются во время установки):
http://server_ip/glpi/plugins/fusioninventory/front/plugin_fusioninventory.communication.php
http://glpi.mydomain/plugins/fusioninventory/front/plugin_fusioninventory.communication.php
http://AD_DOMAIN\user:password@serverip/glpi/plugins/fusioninventory/front/plugin_fusioninventory.communication.php
Возможно придётся указать дополнительные настройки (proxy, etc) — чекбокс «Advanced» при установке.
После установки клиента, заходим в веб интерфейс GLPI -> «Дополнения» -> «FusionInventory» -> «Управление агентами» и смотрим появился ли компьютер в списке.
Чтобы агент не висел постоянно в памяти, то после установки:
Windows
- Скопировать папку установленного Fusion-Inventory
- В ней создать файл save_net.cmd с таким содержанием:
set PATH=%CD%\perl\;%CD%\perl\bin;%PATH% perl.exe %CD%\perl\bin\fusioninventory-agent --debug -f --no-wakeonlan --scan-homedirs --logfile=%CD%agent-log.txt --share-dir=%CD%share —server=http://glpi.mydomain/plugins/fusioninventory/front/plugin_fusioninventory.communication.php
Не забываем изменить «glpi.mydomain» на свое имя/ip.
Для инвентаризации/обновления запускать созданный скрипт, а для сохранения конфигурации компьютера(на котором нет сети)в файл, создаём в папке с Fusion-Inventory каталог «xml» и файл save_local.cmd с таким содержанием:
set PATH=%CD%\perl\;%CD%\perl\bin;%PATH% perl.exe %CD%\perl\bin\fusioninventory-agent --debug -f --no-wakeonlan --scan-homedirs --local=%CD%\xml --logfile=%CD%\agent-log.txt --share-dir=%CD%\share
После запуска этого скрипта конфигурация сохранится в каталог «xml». Для импорта конфигурации в базу — заходим в glpi -> «Дополнения» -> «FusionInventory» -> «Import agent XML file» и выбираем нужный файл из папки xml.
В итоге получим portable версию Fusion Inventory, которую можно запускать с флешки. Главное быть уверенным, что ни у кого нет какой либо живности на компьютере.
FreeBSD / Linux
- Скачиваем тарбол из раздела с пакетами (Для арча подходит тарбол от ubuntu) forge.fusioninventory.org/projects/fusioninventory-agent/wiki/Agent_supportedplateforms
- Правим конфиг agent.cfg,
- От root`a запускаем «fusioninventory-agent»
P.S. Если удалить оборудование/компьютер/etc из списка, а потом прислать агентом на сервер информацию о нём, то онa не появиться в соответствующем списке — нужно отменить удаление («Показать удалённые объекты» -> «Восстановить»)