Pull to refresh

Comments 19

Свои скрипты это конечно прикольно, но вообще, для этого есть и специализированный софт, например OCS Inventory

Спасибо за комментарий! Я понимаю, что есть реализация через сторонний софт, но в ситуации с закрытой корпоративной сеткой и жесткой политикой УИБ - реализовывать подобные вещи достаточно тяжело. Исхожу из ситуации, адаптируюсь.

с закрытой корпоративной сеткой и жесткой политикой УИБ

Запуск PS-скриптов выглядит тоже как-то не очень безопасно. Ну и это... жесткая ИБ подразумевает инвентаризацию всего и вся -> должен быть софт или журналы с подписями или SCCM -> кто-то просто поленился написать обоснование\сыграть тендер\протащить софт для учета, но разрешил скрипты, ИБ такая ИБ ¯\_(ツ)_/¯

Спасибо за комментарий! Честно скажу, в работу ИБшников лезть не очень хочу, они тоже какие-то изменения переживают на данный момент. Возможно что-то поменяется в ближайшее время, обязательно вернусь к софту, но пока скрипты) Это и интересно в целом, написать что-то рабочее, интересное и полезное штатными виндовыми средствами.

Утилита BGInfo позволяет выводить системную информацию на рабочий стол Windows, а также сохранять данные в файлы различных форматов (текстовый, Excel, Access) или базу данных SQL. Ниже приведены примеры командной строки для выполнения bginfo.exe с сохранением информации в разные форматы или базу данных, основанные на документации и возможностях утилиты.

1. Сохранение информации в текстовый файл

Для сохранения данных в текстовый файл с разделителями (например, для последующего импорта в Excel) можно использовать параметр сохранения в файл через меню File > Database или указать это в командной строке.

Пример команды:

bginfo.exe config.bgi /silent /timer:0 /log:c:\logs\systeminfo.txt
  • config.bgi — файл конфигурации, созданный в BGInfo, определяющий, какие данные выводить.

  • /silent — подавляет сообщения об ошибках.

  • /timer:0 — отключает отображение диалогового окна.

  • /log:c:\logs\systeminfo.txt — указывает путь к текстовому файлу для записи данных.

Результат: Информация о системе (например, имя компьютера, IP-адрес, MAC-адрес) будет записана в текстовый файл systeminfo.txt в папке c:\logs.

Примечание: Убедитесь, что папка c:\logs существует, иначе команда выдаст ошибку. Текстовый файл будет содержать данные в формате с разделителями (по умолчанию — табуляция), которые можно открыть в Excel.

2. Сохранение информации в файл Excel (.xls)

Для записи данных в файл Excel необходимо указать путь к файлу с расширением .xls в настройках BGInfo или через командную строку.

Пример команды:

bginfo.exe config.bgi /silent /timer:0 /db:c:\logs\systeminfo.xls
  • /db:c:\logs\systeminfo.xls — указывает путь к файлу Excel, куда будут записаны данные.

Результат: BGInfo создаст или обновит файл systeminfo.xls с системной информацией в формате, пригодном для Excel.

Примечание: Для работы с Excel-файлами может потребоваться установленный Microsoft Excel или совместимый просмотрщик. Если файл уже существует, BGInfo добавляет новую запись, не перезаписывая старые данные.

3. Сохранение информации в базу данных Access (.mdb)

BGInfo поддерживает запись в базу данных Microsoft Access.

Пример команды:

bginfo.exe config.bgi /silent /timer:0 /db:c:\logs\systeminfo.mdb
  • /db:c:\logs\systeminfo.mdb — указывает путь к файлу базы данных Access.

Результат: Данные записываются в файл базы данных Access systeminfo.mdb. Если файл не существует, BGInfo создаст его.

Примечание: Убедитесь, что утилита имеет права на запись в указанную папку. Формат .mdb устаревший, поэтому для современных систем рекомендуется использовать SQL Server или текстовые файлы.

4. Сохранение информации в базу данных SQL Server

Для сохранения данных в базу SQL Server необходимо указать строку подключения к базе данных в настройках BGInfo или в командной строке. Это требует предварительной настройки базы данных и учетной записи с правами на запись.

Пример команды:

bginfo.exe config.bgi /silent /timer:0 /db:"Provider=SQLOLEDB;Data Source=SQLServerName;Initial Catalog=BGInfoDB;User ID=User;Password=Pass"
  • /db:"Provider=SQLOLEDB;Data Source=SQLServerName;Initial Catalog=BGInfoDB;User ID=User;Password=Pass" — строка подключения к SQL Server.

    • SQLServerName — имя сервера SQL.

    • BGInfoDB — имя базы данных.

    • User и Password — учетные данные для доступа к базе.

Результат: Данные записываются в таблицу (по умолчанию BGInfoTable) в указанной базе SQL Server.

Настройка базы данных:

  • Создайте базу данных BGInfoDB на SQL Server.

  • Создайте таблицу BGInfoTable с полями, соответствующими данным, которые вы хотите сохранять (например, HostName, IPAddress, MACAddress).

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

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

5. Вывод данных без обновления рабочего стола

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

Пример команды:

bginfo.exe config.bgi /silent /timer:0 /db:c:\logs\systeminfo.txt /nodesktop
  • /nodesktop — отключает обновление фона рабочего стола.

Результат: Данные записываются в указанный файл (в данном случае systeminfo.txt), но рабочий стол пользователя остается без изменений.

6. Пример BAT-файла для автоматизации

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

@echo off
\\server_name\NETLOGON\BGInfo\bginfo.exe \\server_name\NETLOGON\BGInfo\config.bgi /silent /timer:0 /db:c:\logs\systeminfo.txt
  • Путь \\server_name\NETLOGON\BGInfo\ указывает на сетевую папку, где хранятся bginfo.exe и файл конфигурации config.bgi.

  • Данные записываются в c:\logs\systeminfo.txt.

Применение: Поместите этот BAT-файл в автозагрузку или настройте его выполнение через планировщик задач для регулярного обновления данных.

7. Дополнительные параметры командной строки

Вот несколько полезных параметров для управления поведением BGInfo:

  • /popup — отображает информацию во всплывающем окне вместо рабочего стола.

  • /taskbar — помещает значок в область уведомлений, а информация отображается при клике на него.

  • /all — применяет изменения для всех пользователей, вошедших в систему (полезно в среде терминальных серверов).

  • /rtf — сохраняет данные в формате RTF (например, /log:c:\logs\systeminfo.rtf).

Пример с RTF:

bginfo.exe config.bgi /silent /timer:0 /log:c:\logs\systeminfo.rtf /rtf

Примечание: Убедитесь, что bginfo.exe и файл конфигурации (например, config.bgi) доступны по указанным путям. Для сетевых путей (UNC) может потребоваться настройка прав доступа. Если вы используете BGInfo в доменной сети, рекомендуется настроить выполнение через групповые политики (GPO), как описано в и.

Утилита BGInfo (Background Information) от Sysinternals собирает и отображает разнообразную системную информацию о компьютере под управлением Windows. Она позволяет выводить данные на рабочий стол, в файлы или базы данных, в зависимости от настроек. Ниже приведен перечень основных категорий и типов информации, которые может собирать и отображать BGInfo, основанный на документации и возможностях утилиты.

Основные категории системной информации в BGInfo

BGInfo поддерживает множество встроенных полей (data fields), которые можно настроить через интерфейс программы или файл конфигурации (.bgi). Вот ключевые данные, которые можно вывести:

  1. Общая информация о системе:

    • Computer Name (Имя компьютера): Полное имя компьютера в сети (например, DESKTOP-ABC123).

    • Domain Name (Имя домена): Доменное имя, к которому подключен компьютер (например, company.local).

    • Workgroup (Рабочая группа): Имя рабочей группы, если компьютер не в домене.

    • OS Version (Версия ОС): Версия операционной системы (например, Windows 10 Pro 22H2).

    • Service Pack (Пакет обновлений): Установленный пакет обновлений (если применимо).

    • Build Number (Номер сборки): Номер сборки Windows (например, 19045).

    • System Type (Тип системы): 32-битная или 64-битная архитектура.

    • Boot Time (Время загрузки): Дата и время последней загрузки системы.

    • System Uptime (Время работы системы): Продолжительность работы системы с момента последней загрузки.

  2. Аппаратные характеристики:

    • CPU (Процессор): Модель и характеристики процессора (например, Intel Core i7-8700).

    • Memory (Память): Общий объем оперативной памяти и/или доступная память (например, 16 GB).

    • Free Disk Space (Свободное место на диске): Свободное место на указанных дисках (например, C: 120 GB free).

    • Total Disk Space (Общий объем диска): Общий объем диска (например, C: 512 GB).

    • Physical Disks (Физические диски): Информация о подключенных дисках.

    • Motherboard (Материнская плата): Производитель и модель (если доступно).

    • BIOS Version (Версия BIOS): Информация о версии BIOS или UEFI.

  3. Сетевые параметры:

    • IP Address (IP-адрес): IP-адреса всех сетевых адаптеров (например, 192.168.1.100).

    • MAC Address (MAC-адрес): Физический адрес сетевого адаптера.

    • Subnet Mask (Маска подсети): Маска подсети для каждого адаптера (например, 255.255.255.0).

    • Default Gateway (Шлюз по умолчанию): Адрес шлюза (например, 192.168.1.1).

    • DNS Server (DNS-сервер): Адреса DNS-серверов.

    • DHCP Server (DHCP-сервер): Адрес сервера DHCP, если используется.

    • Network Adapter (Сетевой адаптер): Название и тип адаптера (например, Ethernet, Wi-Fi).

    • Network Speed (Скорость сети): Скорость соединения (например, 1 Gbps).

  4. Информация о пользователе:

    • User Name (Имя пользователя): Имя текущего пользователя (например, john.doe).

    • Logon Domain (Домен входа): Домен, в котором выполнен вход.

    • Logon Server (Сервер входа): Имя сервера, обработавшего вход в систему.

    • Logon Time (Время входа): Время последнего входа пользователя в систему.

  5. Программное обеспечение и лицензии:

    • Installed Applications (Установленные приложения): Список установленных программ (зависит от конфигурации).

    • Product ID (Идентификатор продукта): Идентификатор Windows или другого ПО.

    • License Status (Статус лицензии): Состояние активации Windows (например, Activated).

  6. Дополнительные параметры (настраиваемые поля):

    • Environment Variables (Переменные среды): Любая переменная окружения, например, %PATH% или %TEMP%.

    • Registry Values (Значения реестра): Данные из реестра Windows (например, ключ HKEY_LOCAL_MACHINE\SOFTWARE).

    • WMI Queries (Запросы WMI): Пользовательские запросы к Windows Management Instrumentation (например, для получения специфичных данных, таких как версия драйвера).

    • Custom Fields (Пользовательские поля): Возможность добавления собственных данных через скрипты (VBScript или PowerShell) или текстовые файлы.

    • Time (Время): Текущее системное время или время в определенном часовом поясе.

  7. Дисковые и файловые параметры:

    • Drive Letters (Буквы дисков): Список доступных дисков.

    • File System (Файловая система): Тип файловой системы (например, NTFS, FAT32).

    • Volume Name (Имя тома): Название тома диска.

  8. Информация о безопасности:

    • Windows Update Status (Статус обновлений): Информация о последних обновлениях Windows.

    • Antivirus Status (Статус антивируса): Состояние установленного антивируса (если поддерживается через WMI).

    • Firewall Status (Статус брандмауэра): Состояние брандмауэра Windows.

Форматы вывода

Эти данные можно:

  • Отобразить на рабочем столе в виде текста на фоне обоев.

  • Сохранить в файл: текстовый (.txt), Excel (.xls), RTF (.rtf).

  • Экспортировать в базу данных: Microsoft Access (.mdb) или SQL Server.

  • Вывести в консоль или использовать в скриптах.

Настройка вывода

  • Через GUI: В интерфейсе BGInfo можно выбрать нужные поля, их порядок, шрифт, цвета и расположение.

  • Через командную строку: Используется файл конфигурации (.bgi), где указаны поля для вывода. Пример:

    bginfo.exe config.bgi /timer:0 /silent
    
  • Пользовательские поля: Можно добавить свои данные, используя VBScript, PowerShell или WMI-запросы. Например, запрос WMI для получения версии антивируса:

    SELECT * FROM AntiVirusProduct WHERE displayName LIKE '%Defender%'
    
  • Для получения некоторых данных (например, через WMI) могут потребоваться права администратора.

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

  • Для вывода в базу данных SQL или Access требуется предварительная настройка структуры базы.

Прошу простить, в bginfo запись в xls или в базу данных только через GUI bginfo работает (из командной строки не получается). /rtf работает исправно из командной строки. Параметр /nodesktop не работает. Вместо него используйте /taskbar, а следующей командой завершайте сам процесс bginfo, если не хотите видеть его в трее.

Большое спасибо за комментарий! Рассмотрю тему на досуге, интересный вариант!

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

Спасибо за комментарий! Могли бы вы поделиться скриптом, когда допишите? Было бы очень интересно посмотреть на реализацию, сравнить подход к задаче.

Проходил этим же путем лет десять назад.

  1. Последовательный опрос компьютера за компьютером - это долго и ненадежно. Если один запрос завис из-за кривого WMI, то скрипт не закончится никогда. При этом есть Invoke-Command -AsJob, который позволяет опросить компьютеры параллельно и отработать зависшие запросы.

  2. Архитектурно лучше, когда скрипт запускается на каждой машине через групповые политики или планировщик заданий, собирает всю инвентори в json или csv и кладет в общую папку, из которой админ в любое время может построить вообще любой отчет. Это вот то, что и делает bginfo, но на powershell можно сделать лучше.

  3. Нет необходимости городить html внутри скрипта. В powershell можно управлять форматированием при выводе (пример и дока). Та самая фича, благодаря которой работают Format-List, Format-Table, прочие Format-*. Наверняка же видели, как легко поменять вывод, делая так:
    get-adcomputer -filter * | Format-Table
    get-adcomputer -filter * | Out-GridView
    get-adcomputer -filter * | ConvertTo-HTML

Спасибо за комментарий!

Архитектурно лучше, когда скрипт запускается на каждой машине через групповые политики или планировщик заданий, собирает всю инвентори в json или csv и кладет в общую папку

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

В powershell можно управлять форматированием при выводе (пример и дока).

Осведомлен о возможности PS так делать, но в данной ситуации заиграл «интерес», захотелось нагородить чего-то «бесполезного»)

Нет необходимости городить html внутри скрипта. 

С точки практичности, функции идентичны, но идея отчета в HTML мне показалось интересной. Подумываю сделать что-то в стиле парсера для формирования единого отчета (вытащить данные из html в какой-нибудь CSV).

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

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

Скрипт интересный, сам люблю поиграть с PowerShell, но эта тема сработает, если все машины в одной открытой сети находятся. Если машины в защищённой подсети, то просто не будет сетевой доступности, потому что разрешаются только минимально допустимые связи (доступ от конкретной машины только к конкретной машине по конкретному протоколу и порту) и это как минимум, не говоря о политиках безопасности, СЗИ от НСД и прочих ПО, на которых может сработать СОВ от такого сценария.
В таком случае проще будет запросить информацию по инвентаризации из какого-нибудь KSC у ИБшников, она будет полной по всем подсетям.
На моём текущем рабочем месте админские учётные записи только у отдела ИБ, даже для открытой подсети, не говоря уже про закрытую, так что айтишники таким скриптом у нас никак не воспользуются)

Но за способ и реализацию спасибо!

Большое спасибо за комментарий! Исходя из моего опыта работы (включая госы) - применение скрипта могут найти многие. Там, как правило, ИБ минимальная или никакая вовсе.

В таком случае проще будет запросить информацию по инвентаризации из какого-нибудь KSC у ИБшников

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

На моём текущем рабочем месте админские учётные записи только у отдела ИБ

Интересно. С такой реализацией не доводилось сталкиваться. Был опыт работы в банке, там я имел доступ админский до пары серверов + домена. Вроде не было настолько серьезной политики ИБ.

Вам большое спасибо за мнение! Я невольно радуюсь, когда встречаю людей, которым тоже интересен PS/bash, и как «поиграться», и «решить таск»)

Добрый день!

Скрипт интересный, а вывод в html файл выглядит хорошо, но скрипт требует включение WinRM (не знаю как ваши ИБшники пропустили это) и удалённое исполнение PS скриптов (что также не знаю как ваши ИБшники пропустили), не лучше ли использовать ADSI, который по умолчанию работает и не требует вышеуказанных модулей?

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

не лучше ли использовать ADSI, который по умолчанию работает и не требует вышеуказанных модулей?

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

Плюсом ко всему, в каком-то смысле, я удовлетворяю личный интерес. Не так давно познакомился со скриптами, кодом и прочим. Был заядлым сисадмином, который приемлет только софт, никакого кода.

Верно, увы, но ADSI не всё, что у вас в статье способен добавить
Однако WinRM не безопасен, поскольку использует http, а для https нужно сертификат ставить на каждый компьютер, WMI в данном случае выглядит намного профитнее

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

у нас к примеру WMI используется PRTG, который считывает датчики и сыплет ошибками, если к примеру нагружен процессор или кончилось место на диске, так как порядка 20+ серверов и их как-то нужно мониторить, в WMI удобно настраивается доступ к тому, что можно и нельзя считывать и куда-то передавать (к примеру в файл) через wmimgmt.msc, в том числе возможность только для чтения, так как через WMI можно вносить и изменения

А ваш скрипт на тестовой машине у меня не завёлся даже с полными правами к WMI, выдавая ошибку "Отказано в доступе", даже будучи локальным администратором на ней, пока не смог разобраться почему

Sign up to leave a comment.

Articles