Pull to refresh

Срочная инвентаризация. Или хочу всё знать

Reading time 7 min
Views 215K
Захотелось поделится с хабросообществом парой способов провести инвентаризацию техники быстро и без особых усилий. Сподвигла меня вот эта статья, но как сторонник UNIX-way я расскажу способы сделать всё то же самое и даже больше без необходимости окружать себя гомогенной сетью из одинаковых рабочих станций или привязки к одной технологии.

Что мы хотим?


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

Способ первый, без затрат.


Хотим мы получить инфу о начинке системных блоков организации, например для составления плана модернизации. Вы слышали про встроенную в Windows команду SYSTEMINFO? А она очень полезная. Даст вам информацию о всей системе в удобоваримом виде:

Имя узла:                         VIRTUAL-PC
Название ОС:                      Microsoft Windows 7 
Версия ОС:                        6.1.7601 Service Pack 1 сборка 7601
Изготовитель ОС:                  Microsoft Corporation
Параметры ОС:                     Рядовая рабочая станция
Сборка ОС:                        Multiprocessor Free
Зарегистрированный владелец:      virtual
Зарегистрированная организация:
Код продукта:                    ******************
Дата установки:                   12.03.2011, 5:28:25
Время загрузки системы:           15.02.2012, 13:21:15
Изготовитель системы:             innotek GmbH
Модель системы:                   VirtualBox
Тип системы:                      X86-based PC
Процессор(ы):                     Число процессоров - 1. [01]: x64 Family 6 Model 15 Stepping 11 Genuin
eIntel ~2574 МГц
Версия BIOS:                      innotek GmbH VirtualBox, 01.12.2006
Папка Windows:                    C:\Windows
Системная папка:                  C:\Windows\system32
Устройство загрузки:              \Device\HarddiskVolume1
Язык системы:                     ru;Русский
Язык ввода:                       en-us;Английский (США)
Часовой пояс:                     (UTC+04:00) Волгоград, Москва, Санкт-Петербург

Полный объем физической памяти:   631 МБ
Доступная физическая память:      248 МБ
Виртуальная память: Макс. размер: 1 655 МБ
Виртуальная память: Доступна:     1 056 МБ
Виртуальная память: Используется: 599 МБ
Расположение файла подкачки:      C:\pagefile.sys
Домен:                            ***********
Сервер входа в сеть:              \\SERVER
Исправление(я):                   Число установленных исправлений - 54.
                                 
Сетевые адаптеры:                 Число сетевых адаптеров - 2.
                                  [01]: Intel(R) PRO/1000 MT Desktop Adapter
                                        Имя подключения: Подключение по локальной сети
                                        DHCP включен:    Нет
                                        IP-адрес
                                        [01]: 192.168.16.170
                                  [02]: Intel(R) PRO/1000 MT Desktop Adapter
                                        Имя подключения: Подключение по локальной сети 2
                                        DHCP включен:    Нет
                                        IP-адрес
                                        [01]: 192.168.19.1
                                        [02]: ****::25e7:a222:dc08:****

Просто и понятно.
Но не бегать же по всей фирме запуская консоль и копируя вывод команды в текстовик на какой-нибудь шаре. У нас в компании такое в принципе невозможно, политиками запрещено пользователям запускать CMD, а при использовании «Запуск от имени» все переменные окружения летят в тартарары. Что делать? ВАШЕМУ ВНИМАНИЮ PS-TOOLS!
А конкретнее входящяя в её состав утилита psexec.exe. Но не PSEXEC-ом единым жив человек, вывода на экран нам мало, нам бы это ещё и сохранить всё это безобразие, да желательно с комфортом.
Всё предельно просто:
  • Создаём шару с правами на запись всем подряд, а то мало ли какие урезанные права у рабочих станций (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 

    192.168.16.255 — широковещательный и не нужно его использовать. Так же из списка можно исключить адреса оборудования и серверов к которым Вы подключаться не хотите. Можно использовать и список с именами компов, но я так не делаю.

Далее, открываем cmd и пишем:
psexec.exe @c:\ip-list.txt -d -n 12 systeminfo > \\share\audit\%COMPUTERNAME%.txt

ip-list.txt — это текстовик с ip-адресами.
-d — значит, что psexec не будет ждать пока команда исполнится, а просто запустит systeminfo как демон и отключится от клиента.
-n 12 — это период ожидания ответа клиента (вообще-то правельнее СЕРВЕРА, но так и запутаться недолго), у меня 12 секунд. Если за это время не удастся подключится, то psexec его пропустит. Для пустых IP это не нужно, а вот ко всяким сетевым принтерам и т.п. psexec может пытаться подключится долго и нудно.
Когда скрипт отработает, в \\share\audit\ мы получим кучу текстовиков названых по именам компьютеров в сети. Что с ними дальше делать я попозже расскажу.
Всем хорош этот способ и быстр и прост, но есть у него и недостатки.
  • Тут информация только по содержимому коробки системного блока и чуть-чуть по Windows.
  • Хотя установленные программы хранятся внутри системного блока про них тоже ничего не выводится
  • Даже по внутренностям мало информации, например нет ничего про тип оперативной памяти, только объём. Да и процессор освещён весьма скудно.

Хочу ВСЁ знать


И когда уже недостаточно только отчёта встроенной утилиты на помощ приходит AIDA64 от FinalWire. это тот же EVEREST только уже купленный другой компанией и которому было возвращено историческое название.
В принципе можно обойтись покупкой Business Edition и установкой на все станции. потом разрешить им обмениваться информацией и подключатся друг к другу на коком-нибудь порту, после чего клепать отчёты из приятного интерфейса. Но, во-первых это не тру, а во-вторых с автоматизацией процесса могут возникнуть заминки.
Я обхожусь Extreme Edition, всё то же самое но без сетевых отчётов.
Что бы начать вкушать плоды автоматизации нужно несколько несложных операций.
  1. Повторяем этапы подготовки для Systeminfo
  2. Ставим AIDA64
  3. Копируем папку с установленной AIDA64 из Program Files куда-нибудь на общедоступную шару. Например \\share\audit\aida
  4. В AIDA идём в мастер отчётов


    Пункт «По выбору пользователя»
  5. И здесь выбираем нужную нам информацию.


    Главное не переусердствуйте. Слишком большое количество выбранных пунктов существенно нагрузит клиентские машины, к тому же получится огромный, чрезмерно избыточный отчёт, около 1Mb текстовой информации.
  6. Жмём далее и выбираем нужный тип отчёта. Я рекомендую TEXT или XML, их проще разбирать.
    Затем нажимаем Готово и получаем отчёт по нашей машине. В папке программы появится файлик aida64.rpf. Его мы копируем туда же в шару, где у нас лежит исполняемый файл: \\share\audit\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"

  7. Готово!

Теперь используя всё тот же psexec.exe пришем простенький скрипт который будет запускать AIDA на рабочих станциях с нужными нам параметрами:
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. Скинуть всё необходимое на флешку, использовать относительные пути в скриптах и по приходу в любую фирму понадобится только компьютер и права админа.
Tags:
Hubs:
+23
Comments 34
Comments Comments 34

Articles