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
). Вот ключевые данные, которые можно вывести:
Общая информация о системе:
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 (Время работы системы): Продолжительность работы системы с момента последней загрузки.
Аппаратные характеристики:
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.
Сетевые параметры:
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
).
Информация о пользователе:
User Name (Имя пользователя): Имя текущего пользователя (например,
john.doe
).Logon Domain (Домен входа): Домен, в котором выполнен вход.
Logon Server (Сервер входа): Имя сервера, обработавшего вход в систему.
Logon Time (Время входа): Время последнего входа пользователя в систему.
Программное обеспечение и лицензии:
Installed Applications (Установленные приложения): Список установленных программ (зависит от конфигурации).
Product ID (Идентификатор продукта): Идентификатор Windows или другого ПО.
License Status (Статус лицензии): Состояние активации Windows (например,
Activated
).
Дополнительные параметры (настраиваемые поля):
Environment Variables (Переменные среды): Любая переменная окружения, например,
%PATH%
или%TEMP%
.Registry Values (Значения реестра): Данные из реестра Windows (например, ключ
HKEY_LOCAL_MACHINE\SOFTWARE
).WMI Queries (Запросы WMI): Пользовательские запросы к Windows Management Instrumentation (например, для получения специфичных данных, таких как версия драйвера).
Custom Fields (Пользовательские поля): Возможность добавления собственных данных через скрипты (VBScript или PowerShell) или текстовые файлы.
Time (Время): Текущее системное время или время в определенном часовом поясе.
Дисковые и файловые параметры:
Drive Letters (Буквы дисков): Список доступных дисков.
File System (Файловая система): Тип файловой системы (например,
NTFS
,FAT32
).Volume Name (Имя тома): Название тома диска.
Информация о безопасности:
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 но с нужным мне функционалом.
Проходил этим же путем лет десять назад.
Последовательный опрос компьютера за компьютером - это долго и ненадежно. Если один запрос завис из-за кривого WMI, то скрипт не закончится никогда. При этом есть Invoke-Command -AsJob, который позволяет опросить компьютеры параллельно и отработать зависшие запросы.
Архитектурно лучше, когда скрипт запускается на каждой машине через групповые политики или планировщик заданий, собирает всю инвентори в json или csv и кладет в общую папку, из которой админ в любое время может построить вообще любой отчет. Это вот то, что и делает bginfo, но на powershell можно сделать лучше.
Нет необходимости городить 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, выдавая ошибку "Отказано в доступе", даже будучи локальным администратором на ней, пока не смог разобраться почему
Автоматизация инвентаризации парка ПК: PowerShell-скрипт для сбора системной информации