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

    Захотелось поделится с хабросообществом парой способов провести инвентаризацию техники быстро и без особых усилий. Сподвигла меня вот эта статья, но как сторонник 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. Скинуть всё необходимое на флешку, использовать относительные пути в скриптах и по приходу в любую фирму понадобится только компьютер и права админа.
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 34
    • 0
      Ну, просмотреть список железа это лишь одна из многих функций vPro, сопутствующая я бы даже сказал основному функционалу %)
      • +1
        Как я и говорил здесь нет привязки к железу, никакой.
        А ещё можно смотреть все установленные программы, лицензии на них, показания датчиков, обновления windows, данные по видеокартам и платам расширения, текущую заполненность дисков, перефирию типа принтеров и мониторов, и ещё много чего, что не отностися к аппаратным ресурсам. в том числе утановленные кодек, драйвера и их версии и т.д и т.п. Очень много всего, не перечислить.
        • +9
          OCS NG (серверная часть+агенты через GPO) + GLPI = инвентаризация без геммороя.
          • 0
            Плюсанул. Только без GPLI можно обойтись.
            • 0
              Можно конечно, но мне нравится — удобно ;)
              • 0
                Видимо имелся в виду fusioninventory — родной плагин для glpi (аналог ocs-ng)
            • 0
              мы тоже это юзаем.
              • 0
                А у меня возникли большие проблемы с клиентами под WIN 7. Работают через раз. Даже специально на «чистые» тестовые машины ставил. С ХР проблем нет.
              • +3
                Systeminfo и Everest-Aida это просто издевательство над здравым смыслом, к тому же эверест стоит денег, и немалых, правда?
                WMI — вот, что нужно отцу русской демократии, с помощью инструментария управления windows и виндузятнику будет хорошо, и юниксоиду не менее замечательно.
                • 0
                  Если подскажите насчет WMI, отцы русской демократии будут очень рады.
                • +1
                  Люто, бешено плюсую за WMI.
                  Конструкции типа
                  Select * from Win32_Product — просто прелесть.

                  Скриптов можно написать сколько угодно — лучше читать первоисточник: msdn.microsoft.com/en-us/library/windows/desktop/aa393964(v=vs.85).aspx
                  • 0
                    у нас используется servicedesk с клиентом. он откуда-то берет один из параметров по которому четко идентифицирует клиента. Но проблема в том, что этот Servicetag кажется сильно зависит от инсталляционного диска — если ставится одна винда с одного диска — сервис так один и тот же. вот как понять как его править чтобы можно было однозначноидентифицировать железку?
                • +1
                  OCS Inventory пожалуй не хуже аиды справится.
                  • 0
                    Используем OCS Inventory. Дешево и сердито, если не нужна уж очень подробная информация.
                    У нас работает под все Windows, Linux, Mac OS X и FreeBSD.
                  • 0
                    раньше тоже такая система была для инвентаризации и похожий подход для удалёной установки програмного обеспечения с помощью kix-скриптов. Сейчас переехали на систему opsi(советую всем) — автоматическая установка програмоного обеспечения, инвентаризация «из коробки» и много других полезных функций. Opsi — бесплатна, платны только _новывые_ дополнения(пока основатель не заработает определённую сумму, потом дополнения становятся бесплатными). У нас используется opsi без дополнений. Не сочтите пож. за рекламу; просто очень доволен пакетом.
                    • 0
                      забыл написать: opsi умеет устанавливать операционные системы из заранее сгенериванных образов(должен быть активирован PXE) в автоматическом и ручном режимах.
                    • 0
                      есть еще вариант с MS System Сenter Сonfiguration Manager. :) Это более дорогое решение, но позволяет не только собирать информацию но и управлять клиентскими устройствами и делать массу других полезных вещей. Вся информация складывается в БД, есть много готовых отчетов и их можно делать самим.
                      • 0
                        Из ПО для инвентаризации очень понравился Network Inventory Advisor от ClearApps. Прост и достаточно гибок в использовании, стоит недорого и даже умеет группировать приложения Office в пакеты (вместо вывода Word, Excel и даже MUI по отдельности).
                        • 0
                          Systeminfo запускается с помощью psexec только для фиксированного таймаута? Можно ведь использовать цикл с указанием сервера:

                          for /L %a in (1,1,254) do @(systeminfo /S 192.168.0.%a)
                          • 0
                            Если на очередном IP будет не виндовая машина, а принтер с SMP/CIFS этот скрипт на нём будет долго тупить. Всё-таки возможность ограничить таймаут предпочтительнее. Да и psexec со списками работает, когда не нудно все тачки проверять, а только некоторые, это удобно.
                            Кстати когда подсеть не /24 а /22 или /20 придётся кучу вложенных циклов писать, интерпретатору CMD может плохо сделаться.
                            • 0
                              Для сложных случаев надо использовать скриптовые языки: на vbs/PS элементарно грузится список компьютеров из AD, да и обработку можно запустить в несколько потоков.
                          • 0
                            Мы пользуемся www.lansweeper.com/ — в бесплатном варианте позволяет делать инвентаризацию. Хранит все в базе, куча отчетов и много других вкусностей.
                            • +1
                              Дергать systeminfo с помощью psexec?
                              А чем psinfo не угодил? :)
                              secure.wikimedia.org/wikipedia/ru/wiki/PsInfo

                              Или, если нужно именно отчеты в формате эверест\аида, сделать свой костыль или взять чужой:
                              bko.shatki.info/forum/index.php/topic,767.0.html?PHPSESSID=midb26u57elugh4kp00ivio2t5d8luog
                              • 0
                                Я бы решил эту задачу используя Spiceworks. Он бесплатный и функциональность на высоком уровне. Точность и полноту AIDA конечно не заменит, но на мой взгляд высокая точность в подобных задачах редко нужна.
                                • 0
                                  Пробую собрать информацию о своем компьютере. Программа просто запускается и ничего не делается :(
                                  aida64.exe /R %COMPUTERNAME% /TEXT /CUSTOM test.rpf ЧТЯДНТ?
                                  • 0
                                    Is it possible to create reports automatically using command-line options?
                                    Only AIDA64 Business Edition supports command-line options. List of them can be reviewed in main menu / Help / Command-line Options. Full list of command-line options with explanation is available in the AIDA64 Manual. Using command-line options it is possible to create reports with custom layout in any of the supported report formats. Created reports can be saved to file, inserted to SQL database, sent in e-mail or uploaded to a FTP server.
                                    инфа с офф сайта
                                  • 0
                                    Статья оказалась очень даже кстати, так как на работе в данный момент необходима инвентаризация, и очистка компов от нелицензионного ПО.

                                    Спасибо!
                                    • 0
                                      Я дико извиняюсь, но метод с PSEXEC'ом у меня не работает в описанном выше виде. Он соединяется с удаленной машиной, запускает там systeminfo но формирует файл с именем моей машины, а не удаленной, и внутри файла лишь IP адрес удаленной машины к которой он подключается. У меня в итоге все получилось с использованием PSEXEC но по-другому. Подскажите, что мог сделать не так?
                                      • 0
                                        Потому, что в статье небольшая неточность, а именно: выполнение команды
                                        psexec.exe @c:\ip-list.txt -d -n 12 systeminfo > \\share\audit\%COMPUTERNAME%.txt
                                        

                                        и должно создать файл с именем компьютера, С КОТОРОГО ЗАПУСКАЕТСЯ psexec, т.к. происходит разыменование переменной %COMPUTERNAME% и вместо него подставляется имя запускающего компьютера.
                                        Для того, чтобы заставит удаленный компьютер использовать СВОЮ переменную среды %COMPUTERNAME%, надо запускать так:
                                        psexec.exe @c:\ip-list.txt -d -n 12 systeminfo > \\share\audit\%%COMPUTERNAME%%.txt
                                        
                                      • 0
                                        из wmi можно надергать. psh -> .Net :) даже гуи можно рисовать, о чем я статью и писал.

                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                        Самое читаемое