Инвентаризация программного обеспечения в сети. Настройка сервера инвентаризации

Удаленное сканирование компьютеров и серверов на базе Windows,
OS X, Linux, FreeBSD
и ESX/ESXi без использования предустановленных агентов - вам нужно знать только администраторский пароль. Сканируйте отдельные узлы, диапазоны сетевых адресов или структуру Active Directory.

Учет компьютеров

В централизованном хранилище TNI 4 каждый компьютер занимает всего несколько десятков килобайт. Группируйте устройства, снабжайте их комментариями и прикрепляйте к ним дополнительную информацию. Total Network Inventory 4 превращает инвентаризацию компьютеров на предприятии в отдых.

Отчеты

Формируйте гибкие отчеты по разным категориям данных. Стройте табличные отчеты, используя сотни полей модели данных Total Network Inventory 4. Отчеты можно скопировать, экспортировать или распечатать, а функция поиска покажет вам результаты раньше, чем вы закончите вводить запрос.

Журнал изменений

Отслеживайте изменения в аппаратном и программном обеспечении. Узнайте, когда были поставлены, удалены или обновлены программы на любом компьютере в вашей сети, следите за подключением и отключением устройств, динамикой использования дискового пространства и за многим другим.

Планировщик сканирования

Автоматизируйте сбор данных в организации. Создавайте одноразовые отложенные задачи или расписания для периодического сканирования компьютеров. Каждый день? По пятницам? В первый понедельник каждого месяца? Распишите график сканирования сети, и у вас всегда будет свежая информация.

А также...

Составьте базу данных пользователей ваших компьютеров; храните множество паролей для разных устройств и протоколов; следите за онлайн-статусом устройств в реальном времени. Эти и многие другие функции TNI 4 сэкономят вам немало усилий и нервов.

Просканируется всё!

Компьютеры на базе Microsoft Windows - 2000 и выше. • Компьютеры от Apple с OS X на борту. • Устройства на базе ОС семейства Linux. • Устройства на базе ОС FreeBSD. • Серверы ESX/ESXi. • Любые сетевые устройства, поддерживающие протоколы SNMP или Telnet. •

Что для этого нужно?

Только администраторский пароль. Предустанавливать на удаленные компьютеры агентов или иным образом готовить их к сканированию не требуется. Установите Total Network Inventory 4 на один компьютер - и через несколько минут данные обо всей сети будут перед вами.

Действительно умный сканер

Просто скажите программе, что вам нужно просканировать, и она начнет работать: найдет все узлы в IP-диапазоне, покажет вам список компьютеров в рабочей группе, извлечет структуру домена. Выберите нужные узлы, укажите логины и пароли для отдельных устройств или групп - и нажимайте Начать сканирование.

Уже через несколько минут сканирование компьютеров в сети будет завершено, и информация будет помещена в хранилище TNI 4.

Сканирование по расписанию

Если некоторые устройства нужно просканировать позже или обновлять регулярно, сохраните их в отдельный список и укажите, как и когда их сканировать. Планировщик заданий позволяет гибко настраивать время и периодичность сканирования:

Можно создать произвольное количество задач, запланированных на разные дни и время. Ваши данные будут поддерживаться актуальными автоматически!

Централизованное хранилище

Хранилище TNI 4 - простая папка на жестком диске. Каждый компьютер в ней - файл размером около 35 Кб. Вы можете легко перенести эти файлы в другую базу данных или создать резервную копию. Разрешив общий доступ к папке хранилища, можно работать с ним из разных мест.


Все, что нужно для учета компьютеров

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

Сеть как на ладони

В дерево сети может быть выведена самая различная информация: сетевое имя, IP-адрес, инвентарный номер, иконка и название операционной системы, лампочка онлайн-статуса и многое другое. Total Network Inventory 4 автоматически определит виртуальные системы и отметит их. Вся эта информация может быть использована для поиска: зная хоть что-нибудь о компьютере, вы моментально найдете его среди тысячи других!

Данные по полочкам

Каждый просканированный компьютер можно изучить так, словно вы сидите за ним. Учет компьютеров не может быть проще!

Включайте в отчет любое количество компьютеров и категорий одновременно.

Табличные отчеты

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

Моментальный поиск

Результаты поиска становятся видны по мере ввода запроса: ни одного лишнего клика!

Печать и экспорт

Любой отчет можно распечатать в кратком или полном виде, скопировать в редактор таблиц или экспортировать в PDF, RTF, ODT, HTML и другие форматы.

Знайте, что происходит в вашей сети

При каждом повторном сканировании компьютера TNI создает для него новый снимок конфигурации. Журнал изменений сравнивает эти снимки и предоставляет исчерпывающий список событий: если что-либо было
Добавлено, Удалено или Изменено, вы узнаете об этом здесь.

Можно увидеть, как устанавливаются, удаляются и обновляются приложения…

…как применяются обновления системы…

…как запускаются и останавливаются службы…

…как перемещается аппаратное обеспечение…

…и гораздо больше!

Журнал снабжен мгновенным поиском и возможностью фильтрации, а также доступен в виде печатного отчета:

Создайте подробную карту вашей сети

Визуализируйте структуру сетевых устройств так, как удобно вам. Пользователи лицензии Total Network Inventory 4 Профессиональная имеют доступ к новому редактору карты сети.

Создайте общую карту или же разделите сеть на отдельные сегменты и уровни. Это могут быть карты этажей офиса, различные отделы компании или же другие варианты.

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

Фигуры и задний фон

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

(Нажимайте на картинки, чтобы просмотреть демо)

Широкие возможности

Работайте с устройствами прямо на карте, ведь это проще! Вы можете запустить пинг, пересканировать или выполнить действие прямо из контекстного меню.

Размер карты не имеет границ. Дайте волю своему воображению!

Добрый день!
Начну без прелюдии!

Была задача провести инвентаризацию установленного в офисе ПО. Конечно есть много разного софта на эту тему, но их надо либо покупать, либо воровать.
Долгие поиски по сети привели меня сюда .
Отличный скрипт, отлично документирован, отлично работает.
Я не важно пишу скрипты, поэтому я решил допилить этот скрипт (а не выдумывать новый) под свои нужды.

Итак, в скрипт были внесены следующие изменения:
1. Отключены все диалоговые окна, так как процесс работы скрипта был утомительным ибо если компьютер из списка не доступен (а таких было много) приходилось часто щелкать мышью
2. Вывод недоступных компьютеров в отдельную папку в виде файла с именем этого компьютера (вывести в отдельный файл списком не получилось)
3. Выполнения скрипта для каждого компьютера из списка представленного тхт файлом
4. Добавление версии установленной программы
5. Отключение вывода не очень нужной для меня информации

"настройки для инвентаризации программ
Const UPDATES = False "не учитывать обновления
Const TITLE = "Инвентаризация установленных программ" "заголовок диалоговых окон
Const DATA_DIR = "soft\" "каталог для сохранения отчетов + "\" в конце
Const Error_Dir = "Error\" " Каталог для файлов ошибок
"Const DATA_DIR = "\\SRV\Invent\soft\" "сетевой ресурс для сохранения отчетов + "\" в конце

"настройки для инвентаризации обновлений
"Const UPDATES = True "учитывать только обновления
"Const TITLE = "Инвентаризация установленных обновлений" "заголовок диалоговых окон
"Const DATA_DIR = "updates\" "каталог для сохранения отчетов + "\" в конце
"Const DATA_DIR = "\\SRV\Invent\updates\" "сетевой ресурс для сохранения отчетов + "\" в конце

"прочие настройки
Const DATA_EXT = ".csv" "расширение файла отчета
Const SILENT = False "тихий режим отключен, будет запрошено имя компьютера
"Const SILENT = True "режим отчета о локальном компьютере без вывода диалогов
Const HEAD_LINE = True "выводить заголовки в первой строке CSV-файла

"не завершать скрипт аварийно
On Error Resume Next

"== ВЫПОЛНЕНИЕ

"Указываем файл-источник и необходимые переменные
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile("Указать место откуда брать список компьютеров")" Список компьютеров
Set TextStream = File.OpenAsTextStream(1)
Str = vbNullString

"Начало цикла перебора комьютеров

While Not TextStream.AtEndOfStream

"глобальные переменные
Dim comp, wmio

"узнать имя локального компьютера
Dim nwo
Set nwo = CreateObject("WScript.Network")
comp = LCase(nwo.ComputerName)

"запросить имя удаленного компьютера
If Not SILENT Then
comp = TextStream.ReadLine()
"проверить доступность компьютера
If Len(comp) > 0 And Unavailable(comp) Then


Set TextStream1 = FSO1.CreateTextFile(Error_Dir & comp,True) "Создаем файл с именем недоступного компьютера

TextStream1.Close
comp = ""

End If
End If

"провести инвентаризацию
If Len(comp) > 0 Then InventSoft

"если ошибка
If Len(Err.Description) > 0 Then

Set FSO1 = CreateObject("Scripting.FileSystemObject")
Set TextStream1 = FSO1.CreateTextFile(Error_Dir & comp & Err.Description,True) "Создаем файл с именем недоступного компьютера

End If
" Конец цикла
Wend

TextStream.Close

"== ПОДПРОГРАММЫ

"обращение к WMI оформлено в подпрограмму, чтобы можно было корректно обработать возможную ошибку
Sub InventSoft

"подключить реестр удаленного компьютера через WMI
Set wmio = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\" & comp & "\Root\default:StdRegProv")

"создать файл отчета
Dim fso, tf
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(DATA_DIR) Then
If Not SILENT Then MsgBox "Не найден каталог для сохранения отчета:" & vbCrLf & DATA_DIR, vbExclamation, TITLE
Exit Sub
End If
Set tf = fso.CreateTextFile(DATA_DIR & comp & DATA_EXT, True)

"записать заголовки столбцов
If HEAD_LINE Then tf.WriteLine "Название и Версия"

"искать программы и оформить текст для отчета
Dim s
s = ExtractSoft("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\")
If Len(s) > 0 Then tf.Write s

"для 64-битных систем есть еще другой ключ! (32-битные программы на 64-битной системе)
s = ExtractSoft("SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\")
If Len(s) > 0 Then tf.Write s

"закрыть файл отчета
tf.Close

"проверить указанный ключ реестра; вернуть строку для записи в файл отчета
Function ExtractSoft(key)

"получить коллекцию
Const HKLM = &H80000002 "HKEY_LOCAL_MACHINE
Dim items
wmio.EnumKey HKLM, key, items
If IsNull(items) Then
ExtractSoft = ""
Exit Function
End If

"отобрать нужные элементы
Dim s, item, ok, name, publ, inst, x, prev
s = "" "результат накапливать в строке
For Each item In items

Ok = True "флаг продолжения

"название, пропускать пустые и повторяющиеся
prev = name
wmio.GetStringValue HKLM, key & item, "DisplayName", name
If IsNull(name) Or Len(name) = 0 Or name = prev Then
ok = False
Else "не допускать символ ";"
name = Replace(name, ";", "_")
End If

"отделить заплатки, по значению параметра ParentKeyName = "OperatingSystem"
If ok Then
wmio.GetStringValue HKLM, key & item, "ParentKeyName", x
"для программ
If UPDATES Then
If IsNull(x) Or x <> "OperatingSystem" Then ok = False
"для обновлений
Else
If Not IsNull(x) And x = "OperatingSystem" Then ok = False
End If
End If

"Версия
If ok Then
wmio.GetStringValue HKLM, key & item, "DisplayVersion", publ
If IsNull(publ) Or Len(publ) = 0 Then publ = "-"
End If

"If ok Then s = s & name & ";" & publ & ";" & inst & vbCrLf
If ok Then s = s & name & publ & ";" & vbCrLf

Next
ExtractSoft = s

"проверить доступность компьютера в сети; вернуть True, если адрес недоступен
Function Unavailable(addr)
Dim wmio, ping, p
Set wmio = GetObject("WinMgmts:{impersonationLevel=impersonate}")
Set ping = wmio.ExecQuery("SELECT StatusCode FROM Win32_PingStatus WHERE Address = "" & addr & """)
For Each p In ping
If IsNull(p.StatusCode) Then
Unavailable = True
Else
Unavailable = (p.StatusCode <> 0)
End If
Next
End Function

Вот собственно и все. Сердечно благодарю автора скрипта Павела Железнова. Думаю в полной мере назвать эту статью плагиатом нельзя, и надеюсь это будет кому-то полезно.

З.Ы. Исходный скрипт, легко добавляется в групповые политики, и будет постоянно поддерживать актуальную информацию об установленном в сети ПО на Windows машинах.

Теги: инвентаризация, скрипты

17 февраля 2012 в 14:50

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

  • Системное администрирование

Захотелось поделится с хабросообществом парой способов провести инвентаризацию техники быстро и без особых усилий. Сподвигла меня вот , но как сторонник 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. : 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. : Intel(R) PRO/1000 MT Desktop Adapter Имя подключения: Подключение по локальной сети DHCP включен: Нет IP-адрес : 192.168.16.170 : Intel(R) PRO/1000 MT Desktop Adapter Имя подключения: Подключение по локальной сети 2 DHCP включен: Нет IP-адрес : 192.168.19.1 : ****::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, всё то же самое но без сетевых отчётов.
Что бы начать вкушать плоды автоматизации нужно несколько несложных операций.

Теперь используя всё тот же 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 ещё не изобрели, а многообразие средств удалённого управление столь велико, что не уместится в рамки этой статьи. Тем более это дело вкуса.
  • Tutorial

Доброго дня почтенной публике.

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

Отчего-то мои уважаемые коллеги считают, что инвентаризация ит-оборудования должна отвечать на вопрос «какая начинка внутри компьютера?» или нечто вроде того. Для решения этой задачи привлекаются всякие системы вроде Aida, ведутся совершенно дикие способы учета и мониторинга и так далее. а между тем отношения с бухгалтерией портятся, оборудование теряется, админ носится с выпученными глазами по офису и ничего не может найти.

Парни, открываю страшную тайну: никому вообще нет дела до того, что установлено внутри компьютера. Никого, абсолютно никого не интересует весь тот объем шлака, который выдают автосборщики информации, никому не интересно то, что хранит обычный админ в своих учетных таблицах. Почему? Потому, что бизнес думает в рублях, ему нет никакого дела до мегабайт и мегагерц, потому, что если оборудование до сих пор находится в эксплуатации, его конфигурация наверняка достаточна для решения задач, которые на нем решаются (а если нет, то отслеживание и управление конфигурацией совершенно точно осуществляется не в рамках процесса инвентарного учета).

И тут возникает вопрос: а что же ожидает бухгалтер от ИТ-подразделения? Ответ прост, их интересует всего лишь одно: на месте ли предмет с инвентарным номером ABC1234? Несколько более продвинутого бухгалтера может также заинтересовать, соответствует ли всё ещё инвентарному номеру ABC1234 то изделие, которому этот номер был присвоен? Другими словами, не пытаются ли нам выдать микроволновку LG за дисковое хранилище HP EVA P6000? Иногда нас еще волнует вопрос, соответствует ли изделию с этим инвентарным номером заранее известный нам заводской номер - этот вопрос мы тоже решим. Следует также понимать, что упомянутая микроволновка от упомянутого дискового хранилища с точки зрения бухгалтера отличается именно что инвентарным номером (ну там есть еще стоимость, амортизация и так далее, но, по счастью, это уже не айтишная головная боль). А это понимание нас приводит к дополнительному бонусу: мы легким движением руки можем выстроить прекрасные отношения не только с бухгалтерией, но и с тем подразделением, что учитывает шкафы, столы и стулья, предоставив им удобный инструмент для работы. Кстати, заодно мы решим еще одну задачу: облегчение идентификации оборудования, принадлежащего вашей компании - это поможет вашим коллегам из сторонних организаций легко определить, кто забыл ноутбук в их переговорке.

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

А, и еще я предполагаю, что у вас установлен Microsoft Office. Всю работу мы будем делать именно в нем.

Итак, наш первый шаг - изготовление правильной инвентарной этикетки.

Правильная инвентарная этикетка это то, чего как правило нет нигде. Как делают инвентарную этикетку, если вообще ею заморачиваются? Пишут туда то, что не нужно, не пишут то, что нужно, изготавливают ее неподобающим инструментом (например, ленточным принтером LetraTag - вещь прикольная, только вот не контролирует уникальность вводимых данных и изготовить на ней пару тысяч этикеток без ошибок невозможно. Хоть раз, да облажаешься.)

Правильная инвентарная этикетка, с моей точки зрения, должна содержать:
1. Краткое название объекта хранения (чтоб ни у кого не возникало соблазна при увольнении, например, наклеить инвентарник от дорогого ноутбука на дырокол).
2. Собственно, инвентарный номер объекта
3. Машиночитаемый инвентарный номер - здесь уместен и достаточен только штрихкод. Я видел предложение кодировать информацию QR-кодом, оно ужасно, и я быстро объясню, почему: это решение не предполагает быстрого и массового ввода информации в компьютер. Сканер баркодов представляет собой с точки зрения компьютера usb-клавиатуру, считывание баркода приводит к отправке в компьютер символьной последовательности закодированного текста, как если бы его набрали руками на клавиатуре и нажатию кнопки Enter. Соответственно, при желании можно идти по офису с ноутбуком, к которому подключен сканер бар-кодов, снимать код за кодом и получить на выходе инвентарную таблицу. Будете использовать QR-коды - такого у вас не получится. Ну сосканируете вы код телефоном, ну распознаете, а что дальше?
4. Логотип компании

Сейчас мы это все и сделаем, причем не потратим ни копейки на софт для того, чтобы сделать действительно годную штуку.

Для начала мы получаем в бухгалтерии таблицу с инвентарными номерами и описанием позиций. Не смущаемся, что там много текста в описаниях, он нам нужен, чтобы понимать, о чем идет речь, но печатать на этикетках мы будем свое и сами.
Важно: то, что мы получили инвентарную таблицу от бухгалтерии в электронном виде, дает нам 100% гарантию того, что мы будем делать этикетки с
заведомо правильными инвентарными номерами.
Не менее важно: убедитесь, что инвентарные номера не содержат кириллицы. Если содержат - решите этот вопрос, пока не начали делать всё остальное.

Итак, исходный вид таблицы (описания позиций взяты из реальной жизни, инвентарные номера и логотип компании - нет, но это неважно):

Таблица хороша, будем ее дорабатывать. Введем еще несколько колонок:
Line 1 - сюда мы впишем тип устройства (ноутбук, МФУ, сервер или что там у вас еще есть)
Line 2 - сюда мы впишем марку и модель устройства (например HP Elitebook 6930p)
Barcode - сюда мы вставим баркод-представление нашего инвентарного номера. Об этом чуть ниже.
Sheet - не менее важный параметр. Он нужен для того, чтобы легко находить нужную этикетку на этикеточном листе. Если вы решитесь делать все с нуля по моему рецепту, у вас образуется прорва листов, на которых будут некоторым образом упорядоченные этикетки. Проблема в том, что оборудование разбросано по офису абсолютно хаотичным образом, и, подходя к очередному устройству, вы вряд ли захотите перелопачивать все свои 50-60 листов по 48 этикеток на листе. Позаботьтесь о себе заранее, укажите, на каком листе у вас находится нужная вам этикетка: первые 48 записей - лист 1, с 49 по 96 - лист 2 и так далее. Уверен, справитесь.

Самый важный момент - как же транслировать инвентарный номер в баркод-представление.

Чуть не забыл: к этому моменту у вас под рукой уже должны быть инвентарные этикетки, на которых мы все и будем печатать. Я использую этикетки Avery L6009-20, чего и вам желаю. Они имеют оптимальный размер (45.7 x 21.2 мм), они прочные, они хорошо клеятся и хорошо проходят через лазерный принтер. С моей точки зрения, идеал. Вы можете использовать другие размеры, в этом случае делайте соответствующие поправки при создании макета.

Итак, Avery Wizard для Microsoft Office установлен, открываем MS Word, в нем уже появилось меню Avery c единственной кнопкой:

Нажимаем ее, запускаем плагин, нажимаем очевидное «Далее». В меню выбора этикеток находим нужный нам сорт L6009:

В следующем окне выбираем «Слияние данных из существующего файла», жмем «Далее».

В следующем окне находим и выбираем выбираем созданный нами файл Excel, нажимаем «Далее»

В следующем окне выбираем очевидный «Лист1$» или «Sheet1$», не забываем поставить чекбокс, что первая строка содержит заголовки:

И в результате получаем окно верстки наклейки. По сути, это все то же окно Microsoft Word с практически всеми инструментами верстки текста. В правой части окна верстки имеется список полей таблицы, двойной щелчок вставляет нужное нам поле данных в нужное место этикетки.

Чтобы сэкономить время верстающим, сразу дам оптимальные величины:
Первая строка – поле Line1: Шрифт Arial, высота шрифта 8пт.
Вторая строка – поле Line2: Шрифт Arial, высота шрифта 8пт.
Третья строка – инвентарный номер: Шрифт Arial полужирный, высота шрифта 10пт.
Четвертая строка – баркод-представление инвентарного номера. Шрифт Barcode, высота шрифта 18пт. Обратите внимание, что во время верстки эта строка выглядит ужасно. Этого не надо бояться, так и должно быть.
Слева остается полно места для размещения логотипа.

Итак, вот наш макет:

И мы в одном шаге от победы.
Нажимаем «Далее», нажимаем «Готово», плагин далее сам раздраконит наш файл данных и подготовит листы с этикетками.

Печатаем этикетки на обчном лазерном принтере, получаем этикеточные листы. Не забываем эти листы пронумеровать. Хотите, можете сделать это через добавление колонтитулов с номером страницы, не хотите - надпишите каждый лист ручкой. Будете делать колонтитул - проконтролируйте, чтоб он не сдвинул содержимое вниз.

Итак, вот у нас этикетки:

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

Да, кстати: о том, куда именно наклеивать номера. У себя я использую два варианта: либо так, чтоб этикетка была легкодоступна, но не бросалась в глаза, либо рядом с заводской табличкой с маркой и моделью оборудования, заводским номером и тому подобной информацией.

Первое удобно тем, что инвентарник можно можно легко считать, второе - тем, что нужно меньше вертеть изделие при его инвентаризации: считываем не только инвентарный номер, но и заводской. Да-да. Не все знают, но практически все производители дублируют написание заводского номера баркодом, что изрядно облегчает жизнь специалисту, ответственному за инвентаризацию.

Итак, у нас есть чудесные инвентарные этикетки, мы оклеили ими все, до чего смогли дотянуться в нашей организации, при помощи сканера баркодов мы установили соответствие инвентарных номеров заводским - там, где это можно сделать. Мы молодцы? Да. Можно остановиться? Да, но можно сделать и еще лучше.

Сейчас мы можем быстро проинвентаризировать все офисное имущество, но еще не можем ответить на вопрос «где что лежит?».

Давайте сделаем так, чтобы и это было возможно.

Берем в руки план офиса - нас в нем интересует все вообще: как расположены рабочие места, где комнаты печати, где складские помещения, где что еще.

Взяв план, берем карандаш и начинаем нумеровать все, что видим. У себя я применяю следующую схему:
Location/Room/Place
Где:
Location - трехбуквенная аббревиатура офиса. Например, MSW - Москва, SPB - Питер, NSK - Новосибирск и так далее.
Room - номер помещения
Place - номер места в помещении. Это может быть номер стола, за которым сидит работник, номер полки на складе, номер шкафа и так далее.

В результате у нас получается нечто вроде MSW/123/15A

Полученные номера сводим в табличку Excel - в ней будет всего четыре колонки:
Address - адрес рабочего места
Barcode - баркод-представление адреса
Comment - текстовый комментарий для себя любимого. Я в это поле пишу фамилию работника, если речь идет об адресе рабочего места и прочие комментарии, если это требуется обстоятельствами.
Sheet - номер этикеточного листа, мы это уже проходили.

Теперь, имея подготовленную табличку в Excel, формируем этикетки. Не буду перегружать рассказ картинками, просто расскажу готовый рецепт:

Формат наклейки: наклейка белого цвета Avery Zweckform №3659 (97x42.3мм)
Расположение и формат надписей на наклейке:
1. Первая строка - логотип компании
2. Вторая строка – описание типа места (рабочее место, складское место, складское помещение и т.п.) Шрифт Arial, высота шрифта 11пт.
3. Третья строка – идентификатор рабочего места (вот это вот MSW/123/15A ). Шрифт Arial, полужирный, высота шрифта 14пт.
4. Четвертая строка – баркод-представление идентификатора места. Тип кодирования CODE128. Шрифт – Barcode, высота шрифта 18пт.
5. Пятая строка – контактная информация службы ИТ-поддержки.

Заметили?

У наших сотрудников прямо перед глазами появились телефон и е-мейл адрес хелпдеска, причем практически на халяву. И теперь никто не сможет сказать, что не знал, куда звонить - мы позаботились.

А заодно мы пронумеровали все рабочие места, и теперь любой работник может объяснить, где он находится, не прибегая к языку жестов, HR-служба сможет нам давать заявки на организацию рабочих мест для новых работников, не прибегая к рассказам про «это через стол от Любочки», а новый работник хелпдеска не будет бродить по всему офису в поисках того, кто его позвал, он просто спросит номер рабочего места и посмотрит в поэтажный план, чтобы понять, куда ему идти.

Я намеренно не рассказываю о том, каким софтом пользоваться для сбора и анализа данных. Это может быть и Access, и Excel, и модуль учета 1С, и что угодно еще.
Все, что мы сейчас сделали, может быть интегрировано в любую существующую систему управления активами.

Проведя первичный ввод данных, если мы этого еще не делали, мы получаем таблицу, в которой есть соответствие инвентарного номера, заводского номера, адреса установки, ФИО пользователя - этого достаточно, чтоб уверенно беседовать с бухгалтерами и отвечать на их каверзные вопросы.

В дальнейшем надо просто поддерживать информацию в актуальном состоянии. Задача не из тяжелых.

И, резюмируя:

1. Для управленческого учета вообще не имеют значения начинка компьютеров и характеристики периферии. Имеют значение только инвентарный номер, ФИО материально ответственного лица, местонахождение и, факультативно, заводской номер изделия.
2. Баркоды рулят. Все остальное - не рулит. Из баркодов рулит кодировка Code128.
3. Если что-то можно баркодировать, это нужно баркодировать.
4. Чтобы получить профессионально изготовленные этикетки, надо всего лишь купить этикетки. Софт покупать не надо.
5. Баркод-сканер ускоряет работу в тысячи раз. Даже самый дешевый.
6. При условии, что вы поддерживали инвентарную ведомость в актуальном состоянии, годовую инвентаризацию вы сможете провести практически с той скоростью, с которой вы в состоянии перемещаться по офису. Задиктовывать вслух инвентарные номера и забивать их в компьютер руками вам больше не придется.

В этом году я проводил инвентаризацию. Over 9000 позиций - нашлось все, работа заняла два дня на обход и еще пару дней на поиски того, что не обнаружилось сразу, вроде ноутбуков по домам и в запертых кабинетах, оборудования в технологических помещениях и т.п.

В общем, я доволен.

Чего и вам желаю.

  • IT-инфраструктура
  • Это именно история в стиле success story, a не инструкция по установке. Так как пошаговых how to в интернете и на данном сайте для этого продукта предостаточно. Но все они рассказывают про инвентаризацию ПК, а с серверами есть свои нюансы. GLPI не смотря на существующий серверный функционал и плагины специализируется на инвентаризации ПК. Но в умелых руках можно заточить его под нужды серверных Администраторов (сетевых между прочим тоже). Возможно используемые методы у программистов вызовут нарекания, но напомню сделано это админами и для админов.

    Предистория
    Наверное не нужно объяснять как важно иметь в оперативном доступе актуальную информацию про подопечный зоопарк техники. Особенно это становится важно когда количество начинает переваливает за сотню. Наверняка все проходят через exel файлик с необходимыми полями. С такой же вероятностью у всех возникало чувство отвращения от этого метода при забивании или модифицировании десятка строк.

    Проработав в одном сотовом операторе где количество серверов исчислялось 4-х значными числами и оценив прелести используемой там самописной системы для инвентаризации, я озадачился поиском подобного для моего нового работодателя. Подсказку кинул блог на хабре.

    В одной статье было упоминание про использования связки FusionInventory + GLPI для сбора информации по устанавливаемым серверам. В связи с большим уважением к остальным применяемым в статье технологиям я решил опробовать эту в нашей среде.

    Реализация
    Пару слов о продуктах:
    • GLPI - система для организации heldesk в предприятии с базой данных по оборудованию
    • FusionInventory - автоматизация сбора данных и выполнения задач
    Оба продукта Open Source, оба периодически обновляются и дополняются новыми фичами. Но от обоих продуктов нам понадобится только часть функционала:
    • Хранение основной информации по серверам и виртуальным машинам:
    • Автоматический сбор этих данных с серверов
    • Отслеживание запросов во внешние ТехПоддержки
    • Хранение информации о ТП (кто оказывает поддержку, на каком уровне и когда она кончиться)
    • Ассоциация серверов с бизнес сервисами предоставляемыми ИТ
    • Отслеживание местоположения сервера в стойке
    • Создание отчётов
    После изучения функционала и понимания что потребуется что нет, урезаем в интерфейсе всё лишнее. Это отлично отробатываеться через гибкую систему управления профилями. Создав профиль для администраторов серверов и внимательно пройдясь по доступным галочкам беспощадно выкосил весь неиспользуемый функционал. В таком виде вы и ваши коллеги не будете отвлекаться от основной задачи данного ресурса - кропотливый сбор информации.
    Поверхностный тюнинг
    Суровое наследство GLPI как helpdesk инструмента придётся вырезать залезая в код. Моих навыков в PHP на котором написана система хватает на интуитивное пониманием кода, но несмотря на это можно сделать достаточно много. Сперва рекомендую поправить локализацию для того чтобы элементы инвентаризации назывались не компьютерами, а серверами. Вроде не особо значимый пункт, но помогает в правильном позиционировании продукта внутри компании.

    Файл с русской локализации по умолчанию хранится здесь: /usr/share/glpi/locales/ru_RU.php. Сделайте бэкап и смело правьте названия.

    Следом рекомендую сменить страницу по умолчанию на список серверов. Это сократит на пару кликов доступ к самой востребованной информации и уберёт лишние вопросы:
    cp /usr/share/glpi/front/central.php /usr/share/glpi/front/central.php.b cp /usr/share/glpi/front/computer.php /usr/share/glpi/front/central.php
    Дальше определим набор полей которые мы хотим видеть для серверов. В нашем случае это вылилось в такой список:

    • Имя сервера
    • Серийный номер
    • Модель
    • Адрес консоли управления
    • Статус
    • Местоположение
    • Контакт ответственного за приложения на сервере: человек и подразделение
    Попробуем убрать лишнее с нашей вэбформы отображения сервера. Для этого нужно подредактировать класс computer: /usr/share/glpi/inc/computer.class.php . Находим функцию showForm(и комментируем вывод полей.

    При удачной компановке переносами оставшихся полей получаем подобную форму:

    Советую создать шаблоны с предварительно заданными полями для уменьшения отвращения от заполнения инвентаризации.

    Hint 1: Добавив пару строк в эту же функцию можно получить удобную ссылку на элемент в системе мониторинга nagios в котором есть обратная ссылка в инвентаризацию (см скриншот выше):
    echo ""; echo ""; echo "";
    Hint 2: Переименовав неиспользуемое нашей командой поле «инвентарный номер» в «адрес консоли» и сменив тип на url получили возможность прямо из списка серверов перейти на SP консоль. Помогает оперативно решать проблемы со сбойным сервером.

    Так же дабы не отвлекать наших администраторов лишними элементами рекомендую закомментировать данные вкладки в том же файле (часть из них может быть убрана зарезанием прав через профиль):
    # $this->addStandardTab("ComputerVirtualMachine", $ong, $options); # $this->addStandardTab("RegistryKey", $ong, $options); # $this->addStandardTab("Item_Problem", $ong, $options); # $this->addStandardTab("Link", $ong, $options); # $this->addStandardTab("Reservation", $ong, $options); # $this->addStandardTab("OcsLink", $ong, $options); # $this->addStandardTab("Computer_SoftwareVersion", $ong, $options); # $this->addStandardTab("Note", $ong, $options); # $this->addStandardTab("Document", $ong, $options);

    Сбор данных
    Для того чтобы не вбивать информацию по компонентам воспользовались плагином FusionInventory. Очень хорошая статья по его установке уже . Могу лишь добавить от себя что было изменено в нашем случае.

    Агенты ставить не хотелось в виду и так большого количества постороннего по на серверах. Тем более чаше всего достаточно одного запуска для сбора данных. Не каждый же день у вас меняется ОС или компоненты на сервере. Шара в сети (CIFS и NFS) и распакованный на ней дистрибутив агента FusionInventory под каждую ОС используемую в компании позволяет в одну команду собрать данные:

    • \\share\FusionInventory\Windows\fusioninventory-agent.bat
    • /net/share/FusionInventory/RHEL/fusioninventory-agent
    Как запустить данную процедуру массово в вашей компании решать вам самим. После запуска мы либо получим новый объект в инвентаризации либо обновим данные существующего (уникальность проверяется по серийнику/МАC/IP/имени) с забитыми данными:

    В настройках плагина FusionInventory отключаем сбор той информации которая вам не нужна.

    Hint: результат работы агента можно выгрузить в файл, а потом импортировать в GLPI. Данный механизм создаёт идиальный API для автоматической загрузки любых данных. Мы реализовали на этой возможности импорт данных по виртуальным машинам из нашей фермы VMware.
    У плагина FusionInventory для данных задач есть свой инструмент, но он добавляет компоненты к серверу, вместо создания полноценного элементы списка серверов. Что не так удобно. В последней версии вышедшей пару месяцев назад появился выбор, создавать элемент для виртуалок или компонент к ESXi серверу.

    Отслеживаем внешние заявки
    Так как админов в команде много, они периодически уходят в отпуск или болеют, нужно где то собирать информацию об активных заявках в ТП. Так же полезно знать какие проблемы были с данным сервером (а в нашем случае и со стороджами, свитчами и софтом).

    Решение заложено в GLPI - заявки, но в данном случае они подразумевают заявку наружу, а не внутрь ИТ команды. Для упрощения процедуры заявок было сделано аналогичное урезание функционала:

    Получаем список открытых или закрытых тикетов:

    Дополнение
    Собственно на этом инвентаризация серверов закончена, дальше в зависимости от необходимости дополняем функционал