Разработка программного модуля "Inventory" – решения для автоматизированного сбора инвентаризационной информации с компьютеров под управлением ОС Windows на базе PowerShell.
- Автоматизация процессов инвентаризации: Устранение ручного труда при сборе инвентаризационной информации об аппаратном и программном обеспечении, настройках ОС.
- Обеспечение аудита и контроля: Создание единого, актуального источника инвентаризационной информации для аудита лицензий ПО, проверки соответствия политикам безопасности, планирования модернизации.
- Оптимизация процессов поддержки: Предоставление ИТ-специалистам инструмента для оперативной диагностики конфигурации удаленных и локальных компьютеров.
- Создание основы для анализа: Формирование структурированного хранилища инвентаризационной информации для последующего анализа средствами BI (Excel Power Query).
- Регулярная инвентаризация IT-активов в организациях с парком компьютеров под управлением Windows.
- Аудит лицензионного программного обеспечения.
- Мониторинг состояния оборудования.
- Сбор информации для подготовки требований к закупкам и модернизации.
- Диагностика проблем технической поддержкой.
Настоящим ТЗ описывается текущее состояние системы для целей:
- Формализации требований к эксплуатируемой системе.
- Создания базы для планирования дальнейших доработок и поддержки.
- Установки четких критериев приемки при передаче на сопровождение.
| Термин | Определение |
|---|---|
| Инвентаризационная информация | Информация об аппаратном обеспечении, установленном ПО, настройках ОС и системе, собираемые с компьютера |
| Модуль сбора | Отдельный скрипт PowerShell (.ps1 файл), ответственный за сбор одного конкретного типа инвентаризационной информации (например, hwr.ps1) |
| Командлет | Основная выполняемая единица в PowerShell. В контексте системы – Start-Inventory |
| OU (Organizational Unit) | Организационное подразделение в службе каталогов Active Directory, контейнер для объектов (компьютеров, пользователей) |
| AD | Active Directory, служба каталогов Microsoft |
| WinRM | Windows Remote Management (удаленное управление Windows) |
| DMZ | Demilitarized Zone (демилитаризованная зона) - изолированный сетевой сегмент, предназначенный для размещения общедоступных сервисов |
| WMI | Windows Management Instrumentation - инфраструктура управления системами Windows |
- Целевые операционные системы: Windows 10 и выше; Windows Server 2012 R2 и выше.
- Минимальная версия PowerShell: 3.0 (для удаленного сбора и работы с AD). Для локального сбора достаточно PowerShell 2.0.
- Необходимые компоненты:
- Для удаленного сбора: служба WinRM на целевых компьютерах.
- Для получения списка компьютеров из AD: модуль PowerShell
ActiveDirectoryна компьютере-сборщике. - Для визуализации: Microsoft Excel с поддержкой Power Query (рекомендуется 2016 и выше).
- Архитектура: Файлово-ориентированная, без серверных компонентов и баз данных. Используется сетевой файловый ресурс в качестве центрального хранилища.
- Гибридная модель сбора: Система должна поддерживать локальный (запускаемый непосредственно на объекте сбора) и удаленный (запускаемый на компьютере-сборщике) сбор информации.
- Консолидация в едином хранилище: Вся информация, независимо от метода и источника сбора (домен, изолированный сегмент, автономный компьютер), должны накапливаться и обрабатываться в единой структуре каталогов. Все рабочие каталоги системы могут указывать на сетевые ресурсы (UNC-пути).
- Поддержка изолированных сегментов (DMZ): Для компьютеров без прямого сетевого доступа к центральному хранилищу должен быть предусмотрен сценарий локального сбора с последующим ручным переносом ZIP-архива.
- Модульность: Функциональность сбора каждого типа информации должна быть инкапсулирована в независимый, подключаемый модуль. Добавление нового типа инвентаризационной информации не должно требовать изменения ядра системы.
- Идемпотентность: Повторный запуск сбора с одних и тех же источников не должен приводить к дублированию информации в конечных результатах.
- Гибкость: Поддержка различных сценариев сбора информации.
- Масштабируемость: Возможность постепенного добавления новых источников сбора и сбора новых типов информации.
- Простота развертывания: Не требует установки серверных компонентов или настройки баз данных.
- Совместимость: Единый формат информации для всех методов сбора.
| ID | Наименование | Описание требования | Компонент реализации / Параметр |
|---|---|---|---|
| FR-01 | Управление сбором через единый интерфейс | Весь функционал системы должен быть доступен через основной командлет Start-Inventory |
Start-Inventory.psm1 |
| FR-02 | Локальный сбор инвентаризационной информации | Сбор инвентаризационной информации непосредственно на компьютере, где запущен сбор, с сохранением информации в локальный или сетевой каталог | -StartType InvLocal |
| FR-02.1 | Упаковка инвентаризационной информации в ZIP-архив | При локальном сборе результаты могут быть упакованы в ZIP-архив | -InvFolderZIPFiles |
| FR-03 | Удаленный сбор инвентаризационной информации | Сбор инвентаризационной информации с группы компьютеров, подключенных к сети, с использованием WinRM | -StartType InvRemote |
| FR-03.1 | Управление источниками сбора инвентаризационной информации | Возможность вариантов выбора компьютеров с которых будет выполнен сбор | -InvOU, -InvComputerList |
| FR-03.1.1 | Получение списка из OU | Получение списка компьютеров из заданного OU домена | -InvOU "OU=...,DC=..." |
| FR-03.1.2 | Перечисление имен компьютеров параметром | Получение списка компьютеров через параметр командлета | -InvComputerList "Computer1", "Computer2" |
| FR-03.1.3 | Чтение списка компьютеров из файла | Получение списка компьютеров из CSV файла | -InvComputerList "file:Computers.csv" |
| FR-04 | Выбор типов собираемой информации | Возможность выбора типов собираемой инвентаризационной информации | -SelectInvType |
| FR-04.1 | Интерактивный выбор типов через консоль | Командлет выдает перечень типов информации с возможностью выбора пользователем | -SelectInvType select |
| FR-04.2 | Указание конкретных типов | Указание конкретных типов через параметр командлета (например, ПО ("swr") и обновления ОС ("hfx")) | -SelectInvType "swr", "hfx" |
| FR-05 | Консолидация и обработка информации | Объединение файлов от отдельных компьютеров в итоговые файлы по типам информации | -StartType CreateResult |
| FR-05.1 | Обработка ZIP архивов локального сбора | Автоматическое распаковка ZIP-архивов, полученных с автономных компьютеров, и включение информации из них в процесс консолидации | (часть CreateResult) |
| FR-05.2 | Поддержка актуальности инвентаризационной информации | Автоматическое удаление устаревших файлов инвентаризации перед процессом консолидации | -StartType CreateResult, -DayOld |
| FR-06 | Расширяемость (добавление модулей) | Архитектура должна позволять добавлять новые типы собираемой информации путем создания файла модуля по стандарту, без изменения ядра системы | Каталог Get-Inventory-Module\ |
| FR-07 | Визуализация информации | Возможность визуализации и анализа с использованием BI системы (Excel Power Query). В состав системы входит файл-шаблон inv.xlsx, содержащий предварительно настроенные подключения Power Query к консолидированным CSV-файлам в каталоге InvFolderResult. Шаблон позволяет автоматически загружать и обновлять данные для анализа. Структура шаблона не регламентируется настоящим ТЗ и может изменяться в соответствии с потребностями анализа. | Файл inv.xlsx |
| ID | Категория | Требование | Критерий приемки / Метрика |
|---|---|---|---|
| NFR-01 | Производительность | Минимальное влияние на производительность целевых систем при сборе инвентаризационной информации | Время сбора ≤ 5 минут на компьютере средней мощности (4 ядра CPU, 8 ГБ RAM) |
| NFR-02 | Производительность | Система должна поддерживать механизм оптимизации производительности через проверку актуальности уже собранной информации | Если для компьютера уже существуют файлы инвентаризационной информации и их возраст меньше указанного значения (используется параметр, указывающий максимальный допустимый возраст файлов инвентаризационной информации в днях), сбор с этого компьютера пропускается. При этом значение параметра по умолчанию обеспечивает выполнение сбора без проверки актуальности |
| NFR-03 | Надежность | Устойчивость к ошибкам на отдельных целевых компьютерах | При недоступности или ошибке на одном компьютере сбор продолжается для остальных, ошибка логируется |
| NFR-04 | Надежность | Предварительная проверка наличия необходимых прав доступа при удаленном сборе | Перед началом сбора с удаленного компьютера система проверяет наличие административных прав у используемой учетной записи. При отсутствии необходимых прав система логирует ошибку и пропускает данный компьютер |
| NFR-05 | Надежность | Предварительная проверка доступности компьютеров в сети | Перед началом сбора система проверяет сетевую доступность компьютера и доступность механизма удаленного управления. Для недоступных компьютеров сбор пропускается, система логирует ошибку и пропускает данный компьютер |
| NFR-06 | Надежность | Автоматическая проверка и создание требуемых рабочих каталогов | При запуске система проверяет наличие всех необходимых рабочих каталогов. В случае отсутствия каталогов система автоматически их создает |
| NFR-07 | Надежность | Автоматическая самоконфигурация при определенных условиях | При запуске удаленного сбора без явного указания источников, если компьютер включен в домен Active Directory, система автоматически определяет контекст для сбора - OU компьютера на котором запущен сбор |
| NFR-08 | Надежность | Ведение операционного лога | Система ведет структурированный лог-файл в каталоге InvFolderLog. |
| NFR-08.1 | Надежность | Ротация лог-файлов процедур удаленного сбора и консолидации информации | Логи ведутся в отдельных файлах по дате выполнения. Старые файлы удаляются, система обеспечивает хранение не более 20 лог-файлов |
| NFR-08.2 | Надежность | Ограничение размера лог-файлов локального сбора | Логи ведутся в файле по имени компьютера. Система обеспечивает контроль размера файла не более 20Кб, после превышения размера файл пересоздается |
| NFR-09 | Безопасность | Контроль доступа к информации | Права NTFS на каталогах с инвентаризационной информацией должны следовать принципу наименьших привилегий. |
| NFR-10 | Удобство использования | Наличие встроенной справки | Полноценная справка доступна через Get-Help Start-Inventory -Full, включая описания параметров и примеры |
| NFR-11 | Портативность | Отсутствие жесткой привязки к окружению | Система не требует установки в GAC (Global Assembly Cache, Глобальный кэш сборок), регистрации в системе. Развертывание — копирование файлов |
US-01: Как системный администратор, я хочу собрать инвентаризационную информацию обо всех компьютерах в моем домене, чтобы иметь актуальную информацию об оборудовании и ПО.
Критерии приемки:
- Система собирает все типы инвентаризационной информации со всех компьютеров в указанном OU домена.
- Результаты консолидируются в файлы по типам информации, доступные для анализа в Excel.
# US-01: Сбор инвентаризационной информации c компьютеров включенных в домен
id: "US-01"
title: "Сбор инвентаризационной информации c компьютеров включенных в домен"
role: "системный администратор"
goal: "собрать инвентаризационную информацию обо всех компьютерах в моем домене"
benefit: "иметь актуальную инвентаризацию оборудования и ПО"
context: |
В организации с парком 200+ компьютеров ручной сбор инвентаризационной информации невозможен.
Требуется автоматизированный процесс получения информации.
acceptance_criteria:
- "Система собирает все типы инвентаризационной информации со всех компьютеров в указанном OU домена"
- "Результаты консолидируются в файлы по типам информации, доступные для анализа в Excel"
priority: "high"
implementation_complexity: "medium"
linked_requirements: ["FR-03", "FR-03.1", "FR-03.1.1", "FR-05"]
test_scenario: |
1. Выполнить команду:
`Start-Inventory -StartType InvRemoteCreateResult -InvOU "OU=Computers,DC=company,DC=local" -InvFolderAnyComputers \\fileserver\inventory\InvAnyComputers -InvFolderResult \\fileserver\inventory\InvResult`
2. Дождаться выполнения процедуры сбора
3. Проверить наличие файлов по компьютерам в каталоге \\fileserver\inventory\InvAnyComputers
4. Проверить наличие консолидированных файлов (в количестве 19) в каталоге \\fileserver\inventory\InvResults
5. Открыть файл inv.xlsm, выполнить обновление информации, убедиться в наличии информацииUS-02: Как системный администратор, я хочу собрать инвентаризационную информацию с автономного компьютера, чтобы иметь актуальную информацию об оборудовании и ПО.
Критерии приемки:
- Скрипты системы расположены в локальном каталоге из которого осуществляется запуск.
- Система собирает все типы инвентаризационной информации с автономного компьютера.
- Собранная информация размещается в локальном каталоге.
- Файлы с инвентаризационной информацией для ручного переноса помещаются в ZIP-архивов.
# US-02: Сбор информации с автономного компьютера
id: "US-02"
title: "Сбор информации с автономного компьютера"
role: "системный администратор"
goal: "собрать информацию только с автономного компьютера"
benefit: "иметь актуальную инвентаризацию оборудования и ПО"
context: |
Автономный компьютер не имеет доступ во внутреннюю сеть.
Процесс сбора запускается непосредственно на компьютере.
acceptance_criteria:
- "Скрипты системы расположены в локальном каталоге из которого осуществляется запуск"
- "Система собирает все типы инвентаризационной информации с автономного компьютера"
- "Собранная информация размещается в локальном каталоге"
- "Файлы с инвентаризационной информацией для ручного переноса помещаются в ZIP-архивов"
priority: "medium"
implementation_complexity: "medium"
linked_requirements: ["FR-02", "FR-02.1"]
test_scenario: |
1. На автономном компьютере скопировать скрипты системы в каталог C:\Inventory
2. Выполнить команду:
'Start-Inventory -StartType InvLocal -InvFolderAnyComputers C:\Inventory\InvAnyComputers -InvFolderZIPFiles C:\Inventory\ZIP`
3. Проверить формирование файлов в каталоге C:\Inventory\InvAnyComputers
4. Проверить формирование ZIP файла в каталоге C:\Inventory\ZIPUS-03: Как системный администратор, я хочу выбрать только определенные типы инвентаризационной информации, чтобы сократить время сбора и объем инвентаризационной информации.
Критерии приемки:
- Система поддерживает выбор конкретных типов информации через параметр командлета.
- Имеется интерактивный режим выбора типов.
- Возможность указания списка типов через параметр.
- При выборе подмножества типов собирается только указанная информация.
- Результаты консолидируются в файлы по типам информации, доступные для анализа в Excel.
# US-03: Выборочный сбор определенных типов информации
id: US-03
title: "Выборочный сбор определенных типов информации"
role: "системный администратор"
goal: "собрать информацию только определенного типа с компьютеров в моем домене"
benefit: "сократить время сбора и объем инвентаризационной информации"
context: |
Для решения конкретных задач не требуется полный сбор всех 19 типов информации.
Необходима возможность выбора только нужных типов информации.
acceptance_criteria:
- "Система поддерживает выбор конкретных типов информации через параметр командлета"
- "Имеется интерактивный режим выбора типов"
- "Возможность указания списка типов через параметр"
- "При выборе подмножества типов собирается только указанная информация"
- "Результаты консолидируются в файлы по типам информации, доступные для анализа в Excel"
priority: "medium"
implementation_complexity: "medium"
linked_requirements: ["FR-03", "FR-03.1", "FR-03.1.1", "FR-04", "FR-04.1", "FR-04.2", "FR-05"]
test_scenario: |
1. Выполнить команду:
`Start-Inventory -StartType InvRemoteCreateResult -InvOU "OU=Computers,DC=company,DC=local" -SelectInvType hwr,swr,net -InvFolderAnyComputers \\fileserver\inventory\InvAnyComputers -InvFolderResult \\fileserver\inventory\InvResult`
2. Дождаться выполнения процедуры сбора
3. Проверить создание в каталоге \\fileserver\inventory\InvResult только файлов: hwr.csv, swr.csv, net.csv
4. Убедиться, что другие типы информации не собраны
5. Выполнить команду:
`Start-Inventory -StartType InvRemoteCreateResult -InvOU "OU=Computers,DC=company,DC=local" -SelectInvType select -InvFolderAnyComputers \\fileserver\inventory\InvAnyComputers -InvFolderResult \\fileserver\inventory\InvResult`
6. Убедится в возможности интерактивного выбора типов инвентаризационной информации
7. Выбрать тип Логические диски (dsk)
8. Дождаться выполнения процедуры сбора
9. Проверить создание в каталоге \\fileserver\inventory\InvAnyComputers файла: dsk.csvUS-04: Как IT-менеджер, я хочу получить полную инвентаризационную информацию, актуальностью 60 дней, собранную с сетевых и автономных компьютеров, чтобы провести анализ использования дискового пространства на компьютерах.
Критерии приемки:
- Инвентаризационная информация предварительно собрана системным администратором с сетевых и автономных компьютеров и размещена в соответствующих каталогах.
- Система обрабатывает ZIP архивы файлами полученными с автономных компьютеров.
- Система удаляет файлы с инвентаризационной информацией старше 60 дней.
- Информация с сетевых и автономных компьютеров консолидируются.
- Возможность идентификации компьютеров с недостатком места.
# US-04: Объединение инвентаризационной информации для анализа
id: "US-04"
title: "Объединение инвентаризационной информации для анализа"
role: "IT-менеджер"
goal: "анализировать использование дискового пространства на сетевых и автономных компьютерах на основе инвентаризационной информации"
benefit: "оптимизировать хранение информации"
context: |
На серверах и рабочих станциях заканчивается свободное дисковое пространство.
Требуется выявить компьютеры с критически малым свободным местом.
acceptance_criteria:
- "Инвентаризационная информация предварительно собрана системным администратором с сетевых и автономных компьютеров и размещена в соответствующих каталогах"
- "Система обрабатывает ZIP архивы файлами полученными с автономных компьютеров"
- "Система удаляет файлы с инвентаризационной информацией старше 60 дней"
- "Информация с сетевых и автономных компьютеров консолидируются"
- "Возможность идентификации компьютеров с недостатком места"
priority: "medium"
implementation_complexity: "medium"
linked_requirements: ["FR-05", "FR-05.1", "FR-05.2"]
test_scenario: |
1. Выполнить команду:
`Start-Inventory -StartType InvCreateResult -InvFolderAnyComputers \\fileserver\inventory\InvAnyComputers -InvFolderZIPFiles \\fileserver\inventory\ZIP -InvFolderResult \\fileserver\inventory\InvResult -DayOld 60`
2. Проверить что в каталоге \\fileserver\inventory\InvAnyComputers нет файлов старше 60 дней
3. Открыть Excel-отчет, выполнить обновление информации
4. В Excel-отчете на листе 'dsk' отсортировать по полю FreeSpaceUS-05: Как системный администратор, я хочу использовать разные методы сбора для разных сегментов сети (удаленный сбор для доверенного сегмента, локальный сбор для DMZ) из соображений безопасности.
Критерии приемки:
- Для DMZ: локальный сбор + ручной перенос ZIP-архивов.
- Для внутренней сети: удаленный сбор через WinRM.
- Единый формат информации для обоих методов.
- Автоматическое объединение информации при обработке.
# US-05: Использование разных методов сбора
id: "US-05"
title: "Использование разных методов сбора"
role: "системный администратор"
goal: "использовать разные методы сбора для разных сегментов сети"
benefit: "соблюдать политики безопасности для DMZ и изолированных сетей"
context: |
Компьютеры в DMZ имеют ограниченный доступ во внутреннюю сеть.
Прямой удаленный сбор через WinRM из внутренней сети невозможен.
acceptance_criteria:
- "Для DMZ: локальный сбор + ручной перенос ZIP-архивов"
- "Для внутренней сети: удаленный сбор через WinRM"
- "Единый формат информации для обоих методов"
- "Автоматическое объединение информации при обработке"
priority: "medium"
implementation_complexity: "medium"
linked_requirements: ["FR-02", "FR-02.1", "FR-03", "FR-03.1", "FR-03.1.1", "FR-05", "FR-05.1"]
test_scenario: |
1. На компьютерах в DMZ настроить локальный сбор в ZIP
2. Вручную скопировать архивы в \\fileserver\inventory\ZIP\
3. Для внутренней сети выполнить удаленный сбор в каталог \\fileserver\inventory\InvAnyComputers
4. Запустить CreateResult для объединения информации
`Start-Inventory -StartType InvCreateResult -InvFolderAnyComputers \\fileserver\inventory\InvAnyComputers -InvFolderResult \\fileserver\inventory\InvResult -InvFolderZIPFiles \\fileserver\inventory\ZIP`US-6: Как системный администратор, я хочу получать инвентаризационную информацию с сетевых компьютеров без использования удаленного сбора (с компьютеров на которых отключена служба удаленного управления).
Критерии приемки:
- На компьютере создано задание в системном планировщике для запуска локального сбора в сетевой каталог.
- Скрипты системы расположены в сетевом каталоге из которого осуществляется запуск.
- Собранная информация размещается в сетевом каталоге.
# US-06: Асинхронный сбор с сетевых компьютеров
id: "US-06"
title: "Асинхронный сбор с сетевых компьютеров"
role: "системный администратор"
goal: "использовать локальный сбор для сетевых компьютеров"
benefit: "получать инвентаризационную информацию с компьютеров с которых невозможно собрать информацию удаленно"
context: |
На части компьютеров в организации не включена служба удаленного управления.
На части компьютеров запрещен удаленный сбор и администратор не имеет административных прав на них.
Компьютеры в организации включаются в разное время или могут быть выключены в течении неопределенного периода, из-за чего удаленный сбор не всегда эффективен.
acceptance_criteria:
- "На компьютере создано задание в системном планировщике для запуска локального сбора в сетевой каталог"
- "Скрипты системы расположены в сетевом каталоге из которого осуществляется запуск"
- "Собранная информация размещается в сетевом каталоге"
priority: "medium"
implementation_complexity: "medium"
linked_requirements: ["FR-02"]
test_scenario: |
1. На компьютерах настроить задание планировщика с запуском из сетевого каталога \\fileserver\inventory\\Src и размещением файлов в \\fileserver\inventory\InvAnyComputers
2. Дождаться выполнения задания планировщика
3. Проверить появление файлов в каталоге \\fileserver\inventory\InvAnyComputersВспомогательные сценарии, выполняющие проверки и подготовительные действия.
Примечание: Альтернативные потоки, связанные с общесистемными механизмами (проверка доступности, прав, актуальности информации, создание каталогов), описаны в соответствующих включаемых сценариях (UC-INC-01 — UC-INC-05) и не дублируются в каждом основном Use Case. В основных сценариях приводятся только уникальные альтернативы, специфичные для данного потока.
UC-INC-01: Проверка и подготовка инфраструктуры.
- Актор: Система.
- Описание: Базовые проверки перед началом любой операции сбора или обработки информации.
- Включается в: Все основные Use Cases.
- Основной поток:
- Система проверяет наличие всех обязательных каталогов, указанных в параметрах командлета:
- Если параметры
InvFolderResultилиInvFolderAnyComputersне указаны, система создает требуемые каталоги в каталоге запуска скрипта (NFR-06). - Если каталоги
InvFolderResultилиInvFolderAnyComputersнедоступны, генерируется исключение.
- Если параметры
- Система проверяет наличие каталога размещения лог-файлов:
- Если параметр
InvFolderLogне указан, лог-файл не ведется. - Если каталог
InvFolderLogнедоступен, лог-файл не ведется.
- Если параметр
- Система выполняет ротацию лог-файлов (NFR-08.1, NFR-08.2):
- Для удаленного сбора/консолидации: оставляет не более 20 последних файлов.
- Для локального сбора: контролирует размер файла (не более 20Кб).
- Система проверяет наличие всех обязательных каталогов, указанных в параметрах командлета:
UC-INC-02: Проверка актуальности информации.
- Актор: Система.
- Описание: Проверка, требуется ли выполнять сбор для конкретного компьютера на основе возраста существующей информации.
- Включается в: UC-01, UC-02, UC-03, UC-06.
- Предусловие: Задан параметр
DayOldдля локального сбора иInvRemoteDayOldдля удаленного сбора. - Основной поток:
- Система проверяет наличие в каталоге
InvFolderAnyComputersфайлов для данного компьютера по шаблонуИмяКомпьютера.*.csv. - Если файлы существуют:
- Определяется дата самого свежего файла.
- Вычисляется разница в днях между текущей датой и датой файла.
- Если разница меньше или равна
DayOldдля локального сбора, илиInvRemoteDayOldдля удаленного сбора, система пропускает сбор для этого компьютера (логирует пропуск) (NRF-02)
- Если файлы не существуют или их возраст превышает
DayOld|InvRemoteDayOld, сбор выполняется.
- Система проверяет наличие в каталоге
- Альтернативный поток:
- Если параметры
DayOldилиInvRemoteDayOldне указан (NFR-02):- Проверка пропускается, сбор выполняется для всех компьютеров.
- Если параметры
UC-INC-03: Получение перечня компьютеров.
- Актор: Система.
- Описание: Проверка корректности и непротиворечивости параметров (определяющих список целевых компьютеров), получение списка компьютеров.
- Включается в: UC-01, UC-03, UC-05.
- Основной поток:
- Система проверяет одновременное указание взаимоисключающих параметров (
InvOUиInvComputerList):- Если указаны оба - выводится сообщение, выполнение прекращается.
- Если
InvComputerListначинается с префиксаfile:(FR-03.1.3):- Система проверяет наличие указанного файла.
- Если файл существует - система получает перечень компьютеров из файла.
- Если файл не существует - система выдает сообщение и прекращает выполнение.
- Если
InvComputerListне пустой и не начинается с префиксаfile:(FR-03.1.2 ):- Система получает перечень компьютеров из значений параметра
InvComputerList.
- Система получает перечень компьютеров из значений параметра
- Если
InvOUзадан:- Система проверяет наличие модуля ActiveDirectory:
- Если модуль отсутствует - выводится сообщение с инструкцией по установке, выполнение прекращается.
- Если модуль существует - система проверяет наличие
InvOUв домене. - Если OU не существует - система выдает сообщение и прекращает выполнение.
- Система проверяет наличие модуля ActiveDirectory:
- Если
InvOUне задан:- Система определяет текущее OU компьютера, на котором запущен процесс и использует его в качестве значения
InvOU(NFR-07). - Выводит информационное сообщение об использовании текущего OU.
- Система определяет текущее OU компьютера, на котором запущен процесс и использует его в качестве значения
- Система получает перечень компьютер в
InvOU(если параметрDayOldзадан, получает только компьютеры активные в теченииDayOldдней) (FR-03.1.1). - Формируется итоговый список компьютеров для обработки.
- Система проверяет одновременное указание взаимоисключающих параметров (
UC-INC-04: Проверка доступности компьютера.
- Актор: Система.
- Описание: Проверка возможности удаленного подключения к целевому компьютеру.
- Включается в: UC-01, UC-03, UC-05.
- Предусловие: Получен список компьютеров для обработки.
- Основной поток (для каждого компьютера в списке):
- Система проверяет сетевую доступность компьютера (Test-Connection):
- Если компьютер недоступен — логируется ошибка, компьютер пропускается (NFR-05).
- Система проверяет доступность службы WinRM (Test-WSMan):
- Если служба недоступна — логируется ошибка, компьютер пропускается (NFR-05).
- Система проверяет наличие административных прав на целевом компьютере:
- Если прав недостаточно — логируется ошибка, компьютер пропускается (NFR-04).
- Если все проверки пройдены, устанавливается CIM-сессия для сбора информации.
- Система проверяет сетевую доступность компьютера (Test-Connection):
UC-INC-05: Валидация типов собираемой информации.
- Актор: Система.
- Описание: Проверка корректности параметров, определяющих список типов собираемой информации, получение списка типов собираемой информации.
- Включается в: UC-01, UC-02, UC-03, UC-05.
- Основной поток:
- Система валидирует переданные типы информации в параметре
SelectInvType(FR-04.2):- Каждый тип проверяется на наличие соответствующего модуля в каталоге
Get-Inventory-Module\. - Если тип не является корректным, выводится предупреждение, тип исключается из сбора.
- Каждый тип проверяется на наличие соответствующего модуля в каталоге
- Система валидирует переданные типы информации в параметре
- Альтернативные потоки:
- Интерактивный выбор типов:
- При значении параметра
SelectInvType selectсистема выводит список всех доступных типов с возможностью множественного выбора (FR-04.1). - Пользователь выбирает требуемые типы.
- Если пользователь отказался от выбора (закрыл окно выбора), сбор прекращается.
- Выполняется сбор только выбранных типов.
- При значении параметра
- Если после валидации типов список оказался пуст (все указанные типы некорректны) — сбор прекращается с сообщением об ошибке.
- Интерактивный выбор типов:
Акторы:
- Системный администратор (Admin).
- IT-менеджер (Manager).
- Автоматизированная задача (Scheduled Task).
UC-01: Удаленный сбор инвентаризационной информации со всего домена.
- Актор: Admin.
- Описание: Полный цикл удаленного сбора и консолидации информации со всех компьютеров в заданном OU домена.
- Включает: UC-INC-01, UC-INC-03, UC-INC-05. Для каждого компьютера: UC-INC-04. Для каждого компьютера, если указан InvRemoteDayOld: UC-INC-02.
- Предусловие: Наличие прав администратора на компьютерах в домене, доступ к сетевому каталогу для хранения информации.
- Основной поток:
- Администратор запускает PowerShell под учетной записью с правами администратора на компьютерах в домене.
- Выполняет командлет:
Start-Inventory -StartType InvRemoteCreateResult -InvOU "OU=Workstations,DC=company,DC=local" -InvFolderAnyComputers \\fileserver\inventory\InvAnyComputers -InvFolderResult \\fileserver\inventory\InvResult -InvFolderLog \\fileserver\inventory\Logs -DayOld 60 -InvRemoteDayOld 5
- Система выполняет UC-INC-01 (Проверка и подготовка инфраструктуры).
- Система выполняет UC-INC-05 (Валидация типов собираемой информации), получая список типов информации.
- Система выполняет UC-INC-03 (Получение перечня компьютеров), получая список компьютеров из указанного OU.
- Для каждого компьютера из полученного списка:
- Если указан параметр
InvRemoteDayOld, система выполняет UC-INC-02 (Проверка актуальности информации). - Если требуется сбор (информация устарела или отсутствует), система выполняет UC-INC-04 (Проверка доступности компьютера).
- Если компьютер доступен:
- Для каждого типа информации из полученного списка типов:
- Загружается соответствующий модуль из каталога
Get-Inventory-Module\. - Выполняется удаленный сбор инвентаризационной информации через установленную CIM-сессию.
- Результат сохраняется в файл формата
ИмяКомпьютера.КодТипа.csvв каталогеInvFolderAnyComputers.
- Загружается соответствующий модуль из каталога
- При ошибке в одном модуле сбор продолжается для остальных, ошибка логируется.
- Для каждого типа информации из полученного списка типов:
- Если указан параметр
- После завершения сбора со всех доступных компьютеров запускается процедура консолидации:
- Если указан параметр
DayOld, в каталогеInvFolderAnyComputersудаляются файлы инвентаризации старше указанного количества дней. - Система сканирует каталог
InvFolderAnyComputersи группирует файлы по списку типов информации. - Для каждого типа информации создается итоговый файл
Тип.csvв каталогеInvFolderResult.
- Если указан параметр
- Постусловие: Инвентаризационная информация собрана и доступна для анализа в Excel-отчете
inv.xlsm. - Альтернативные потоки:
- Если после завершения сбора не было собрано информации ни с одного компьютера (все недоступны или вся информация актуальны), система выводит предупреждение "Нет информации для консолидации" и завершает выполнение без создания итоговых файлов.
- Исключения:
- Если учетная запись под которой запущен процесс не имеет административных прав на целевом компьютере, система выводит предупреждение и переходит к следующему компьютеру (NFR-04).
- Если при выполнении сбора произошла критическая ошибка, делающая невозможным продолжение, процесс прерывается, частично собранная информация сохраняются.
UC-02: Локальный сбор инвентаризационной информации с автономного компьютера.
- Актор: Scheduled Task.
- Описание: Сбор инвентаризационной информации непосредственно на компьютере с последующей упаковкой в ZIP-архив для ручного переноса.
- Включает: UC-INC-01, UC-INC-05. UC-INC-02 (если указан DayOld).
- Предусловие: Настроенная задача в планировщике Windows, скрипты системы размещены в локальном или сетевом каталоге.
- Основной поток:
- Планировщик задач запускает командный файл
InvLocal.cmdот имени SYSTEM. - Выполняется PowerShell скрипт
InvLocal.ps1с параметрами:StartType = "InvLocal"InvFolderAnyComputers(путь для сохранения собранной информации)InvFolderZIPFiles(путь для сохранения архивов)DayOld(актуальность информации в днях)InvFolderLog(путь для сохранения логов)
- Система выполняет UC-INC-01 (Проверка и подготовка инфраструктуры).
- Система выполняет UC-INC-05 (Валидация типов собираемой информации), получая список типов информации.
- Если указан параметр
DayOld, система выполняет UC-INC-02 (Проверка актуальности информации) для данного компьютера. - Если требуется сбор (информация устарела или отсутствует):
- Для каждого типа информации из полученного списка типов:
- Загружается соответствующий модуль из каталога
Get-Inventory-Module\. - Выполняется локальный сбор инвентаризационной информации.
- Результат сохраняется в файл формата
ИмяКомпьютера.КодТипа.csvв каталогеInvFolderAnyComputers.
- Загружается соответствующий модуль из каталога
- При ошибке в одном модуле сбор продолжается для остальных, ошибка логируется.
- Для каждого типа информации из полученного списка типов:
- Если указан параметр
InvFolderZIPFiles:- Система упаковывает все собранные файлы в ZIP-архив с именем по шаблону:
inv.ИмяКомпьютера.zip. - ZIP-архив сохраняется в каталоге
InvFolderZIPFiles.
- Система упаковывает все собранные файлы в ZIP-архив с именем по шаблону:
- Планировщик задач запускает командный файл
- Постусловие: ZIP-архив с инвентаризационной информацией готов для ручного переноса в центральное хранилище.
- Альтернативные потоки:
- Если параметр
InvFolderZIPFilesне указан, упаковка в архив не выполняется, информации остается вInvFolderAnyComputers.
- Если параметр
UC-03: Выборочный сбор определенных типов инвентаризационной информации.
- Актор: Admin.
- Описание: Сбор только указанных типов инвентаризационной информации с конкретных компьютеров для решения узких задач.
- Включает: UC-INC-01, UC-INC-03, UC-INC-05. Для каждого компьютера: UC-INC-04. Для каждого компьютера, если указан InvRemoteDayOld: UC-INC-02.
- Предусловие: Определены типы информации для сбора, доступ с правами администратора к целевым компьютерам.
- Основной поток:
- Администратор запускает PowerShell.
- Выполняет командлет с параметром выбора типов и указанием целевых компьютеров:
Start-Inventory -StartType InvRemote -SelectInvType hwr,swr,net -InvComputerList PC-01,PC-02 -InvFolderAnyComputers \\fileserver\inventory\InvAnyComputers
- Система выполняет UC-INC-01 (Проверка и подготовка инфраструктуры).
- Система выполняет UC-INC-05 (Валидация типов собираемой информации), получая список типов информации.
- Система выполняет UC-INC-03 (Получение перечня компьютеров), получая список целевых компьютеров.
- Для каждого компьютера из полученного списка:
- Если указан параметр
InvRemoteDayOld, система выполняет UC-INC-02 (Проверка актуальности информации) для данного компьютера. - Если требуется сбор, система выполняет UC-INC-04 (Проверка доступности компьютера).
- Если компьютер доступен:
- Для каждого типа информации из списка типов:
- Загружается соответствующий модуль.
- Выполняется удаленный сбор инвентаризационной информации через установленную CIM-сессию.
- Результат сохраняется в файл формата
ИмяКомпьютера.КодТипа.csvв каталогеInvFolderAnyComputers.
- Для каждого типа информации из списка типов:
- Если указан параметр
- Постусловие: Специализированная инвентаризационная информация собрана и готова для анализа.
- Альтернативные потоки: (аналогично UC-01).
- Исключения: (аналогично UC-01).
UC-04: Объединение инвентаризационной информации для анализа.
- Актор: Manager.
- Описание: Обработка ранее собранной инвентаризационной информации, включая распаковку ZIP-архивов и консолидацию.
- Включает: UC-INC-01.
- Предусловие: Наличие собранной информации в каталоге
InvFolderAnyComputersи/или ZIP-файлов в каталогеInvFolderZIPFiles. - Основной поток:
- Менеджер запускает процедуру обработки:
Start-Inventory -StartType CreateResult -DayOld 30 -InvFolderAnyComputers \\fileserver\inventory\InvAnyComputers -InvFolderZIPFiles \\fileserver\inventory\ZIP -InvFolderResult \\fileserver\inventory\InvResult
- Система выполняет UC-INC-01 (Проверка и подготовка инфраструктуры).
- Если указан параметр
InvFolderZIPFilesи каталог существует:- Система сканирует каталог на наличие ZIP-файлов по шаблону
inv.*.zip. - Для каждого ZIP-файла:
- Выполняется распаковка в каталог
InvFolderAnyComputers. - Если файл с таким именем уже существует, он перезаписывается.
- Если архив поврежден, система логирует ошибку и пропускает файл.
- Выполняется распаковка в каталог
- Система сканирует каталог на наличие ZIP-файлов по шаблону
- Запускается процедура консолидации информации:
- Если указан параметр
DayOld, в каталогеInvFolderAnyComputersудаляются файлы инвентаризации старше указанного количества дней. - Система сканирует каталог
InvFolderAnyComputersи группирует файлы по типу информации. - Для каждого типа информации создается итоговый файл
Тип.csvв каталогеInvFolderResult.
- Если указан параметр
- Менеджер запускает процедуру обработки:
- Постусловие: Консолидированная инвентаризационная информация готова для импорта в Excel и анализа.
- Альтернативные потоки:
- Если параметр
InvFolderZIPFilesне указан или каталог не существует, этап распаковки пропускается. - Если после распаковки в
InvFolderAnyComputersне обнаружено CSV-файлов, система выводит предупреждение и завершает выполнение.
- Если параметр
- Исключения:
- Каталог
InvFolderResultнедоступен для записи — выполнение прекращается.
- Каталог
UC-05: Гибридный сбор из разных доменов и сегментов сети.
- Актор: Admin.
- Описание: Комбинированный сбор инвентаризационной информации из различных источников (разные домены, DMZ, изолированные сети) в единую инвентаризационную базу.
- Включает: UC-INC-01, UC-INC-05, UC-INC-03 (для каждого домена).
- Предусловие: Наличие компьютеров в разных доменах и сетевых сегментах, учетные данные для каждого домена.
- Основной поток:
- Сбор из основного домена:
- Администратор запускает PowerShell под учетной записью с правами в domain1.
- Выполняется командлет с параметрами для первого домена:
Start-Inventory -StartType InvRemote -InvOU "OU=Computers,DC=domain1,DC=local" -InvFolderAnyComputers \\fileserver\inventory\InvAnyComputers
- Система выполняет UC-INC-01, UC-INC-03, UC-INC-05.
- Для каждого компьютера из OU domain1 выполняется сбор инвентаризационной информации (аналогично UC-01, шаг 6, без финальной консолидации).
- Сбор из дополнительного домена:
- Администратор запускает PowerShell под учетной записью с правами в domain2.
- Выполняется аналогичный командлет для domain2 с указанием того же
InvFolderAnyComputers.
- Сбор из DMZ/изолированного сегмента:
- На компьютерах в DMZ выполняется UC-02 (Локальный сбор) с упаковкой в ZIP.
- ZIP-архивы вручную переносятся в каталог
InvFolderZIPFilesцентрального хранилища.
- Финальная консолидация:
- Администратор запускает UC-04 (Объединение информации) для обработки всех источников.
- Сбор из основного домена:
- Постусловие: Единая инвентаризационная информация по всем доменам и сегментам сети.
- Исключения:
- Если учетная запись под которой запущен процесс не имеет административных прав на целевом компьютере, система выводит предупреждение и переходит к следующему компьютеру (NFR-04).
- При пересекающихся именах компьютеров в разных доменах файлы вида
ComputerName.Тип.csvперезаписываются последним выполненным сбором. - Для избежания коллизий рекомендуется использовать суффикс домена в имени компьютера при сборе.
UC-06: Асинхронный сбор с сетевых компьютеров.
- Актор: Scheduled Task.
- Описание: Локальный сбор с прямой записью в сетевой каталог для компьютеров, где удаленный сбор невозможен.
- Включает: UC-INC-01, UC-INC-05. UC-INC-02 (если указан DayOld).
- Предусловие: Созданы сетевые каталоги
\\fileserver\inventory\InvAnyComputers(запись) и\\fileserver\inventory\Src(чтение), настроены права доступа для учетных записей компьютеров. - Основной поток:
- Планировщик задач на целевом компьютере запускает командный файл
InvLocal.cmdиз сетевого каталога\\fileserver\inventory\Srcот имени SYSTEM. - Выполняется PowerShell скрипт
InvLocal.ps1с параметрами:StartType = "InvLocal"InvFolderAnyComputers = \\fileserver\inventory\InvAnyComputersDayOld = 5
- Система выполняет UC-INC-01 (Проверка и подготовка инфраструктуры), проверяет доступность сетевых каталогов.
- Система выполняет UC-INC-05 (Валидация типов собираемой информации), получая список типов информации.
- Если указан параметр
DayOld, система выполняет UC-INC-02 (Проверка актуальности информации) для данного компьютера. - Если требуется сбор (информация устарела или отсутствует):
- Для каждого типа информации из списка типов информации:
- Загружается соответствующий модуль из каталога
Get-Inventory-Module\(из сетевого каталога). - Выполняется локальный сбор инвентаризационной информации.
- Результат сохраняется в файл формата
ИмяКомпьютера.КодТипа.csvнепосредственно в сетевой каталогInvFolderAnyComputers.
- Загружается соответствующий модуль из каталога
- Для каждого типа информации из списка типов информации:
- Планировщик задач на целевом компьютере запускает командный файл
- Постусловие: Инвентаризационная информация размещена в центральном хранилище и доступна для консолидации.
- Альтернативные потоки:
- Исключения:
- Каталог
\\fileserver\inventory\Srcне существует или недоступен — задание планировщика не может быть выполнено. - Если компьютер не включен в домен, требуется предварительно проверить настройку доступа к каталогам
\\fileserver\inventory\InvAnyComputersи\\fileserver\inventory\Src.
- Каталог
| Основной сценарий (UC) | UC-INC-01 (Проверка инфраструктуры) | UC-INC-02 (Проверка актуальности информации) | UC-INC-03 (Получение перечня компьютеров) | UC-INC-04 (Проверка доступности) | UC-INC-05 (Валидация типов собираемой информации) |
|---|---|---|---|---|---|
| UC-01: Удаленный сбор со всего домена | Да | Да* | Да | Да | Да |
| UC-02: Локальный сбор с автономного ПК | Да | Да* | Нет | Нет | Да |
| UC-03: Выборочный сбор типов информации | Да | Да* | Да | Да | Да |
| UC-04: Объединение инвентаризационной информации для анализа | Да | Нет | Нет | Нет | Нет |
| UC-05: Гибридный сбор (разные сегменты) | Да | Да* | Да** | Да | Да |
| UC-06: Асинхронный сбор (сетевой ПК) | Да | Да* | Нет | Нет | Да |
* — Проверка актуальности выполняется только если указан параметр DayOld или InvRemoteDayOld.
** — Валидация источников выполняется для каждого домена или списка компьютеров.
| ID требования | Наименование требования | Сценарий использования (Use Case) |
|---|---|---|
| FR-01 | Управление сбором через единый интерфейс | UC-01, UC-02, UC-03, UC-04, UC-05, UC-06 |
| FR-02 | Локальный сбор инвентаризационной информации | UC-02, UC-06 |
| FR-02.1 | Упаковка инвентаризационной информации в ZIP-архив | UC-02 |
| FR-03 | Удаленный сбор инвентаризационной информации | UC-01, UC-03, UC-05 |
| FR-03.1 | Управление источниками сбора инвентаризационной информации | UC-01, UC-03, UC-05 |
| FR-03.1.1 | Получение списка из OU | UC-01, UC-05 |
| FR-03.1.2 | Перечисление имен компьютеров параметром | UC-03 |
| FR-03.1.3 | Чтение списка компьютеров из файла | UC-03 |
| FR-04 | Выбор типов собираемой информации | UC-03 |
| FR-04.1 | Интерактивный выбор типов через консоль | UC-03 |
| FR-04.2 | Указание конкретных типов | UC-03 |
| FR-05 | Консолидация и обработка инвентаризационной информации | UC-01, UC-04, UC-05 |
| FR-05.1 | Обработка ZIP архивов локального сбора | UC-04, UC-05 |
| FR-05.2 | Поддержка актуальности инвентаризационной информации | UC-01, UC-04, UC-05 |
| FR-06 | Расширяемость (добавление модулей) | UC-01, UC-02, UC-03, UC-06 |
| NFR-01 | Минимальное влияние на производительность | UC-01, UC-02, UC-03, UC-06 |
| NFR-02 | Проверка актуальности уже собранной инвентаризационной информации | UC-01, UC-02, UC-03, UC-06 |
| NFR-03 | Устойчивость к ошибкам на отдельных целевых компьютерах | UC-01, UC-02, UC-03, UC-06 |
| NFR-04 | Предварительная проверка наличия необходимых прав доступа | UC-01, UC-03, UC-05 |
| NFR-05 | Предварительная проверка доступности компьютеров в сети | UC-01, UC-03, UC-05 |
| NFR-06 | Автоматическая проверка и создание требуемых рабочих каталогов | UC-01, UC-02, UC-03, UC-04, UC-05, UC-06 |
| NFR-07 | Автоматическая самоконфигурация при определенных условиях | UC-01, UC-05 |
| NFR-08 | Ведение операционного лога | UC-01, UC-02, UC-03, UC-04, UC-05, UC-06 |
| NFR-08.1 | Ротация лог файлов процедур удаленного сбора и консолидации инвентаризационной информации | UC-01, UC-03, UC-04, UC-05 |
| NFR-08.2 | Ротация лог файлов локального сбора | UC-02, UC-06 |
| NFR-09 | Контроль доступа к информации | (Требование к инфраструктуре) |
| NFR-10 | Наличие встроенной справки | (Не относится к UC) |
| NFR-11 | Портативность | (Не относится к UC) |
| Пользовательская история | Сценарий использования | Вспомогательные сценарии |
|---|---|---|
| US-01: Сбор со всего домена | UC-01: Удаленный сбор со всего домена | UC-INC-01, UC-INC-02, UC-INC-03, UC-INC-04 |
| US-02: Автономный компьютер | UC-02: Локальный сбор с автономного ПК | UC-INC-01, UC-INC-02 |
| US-03: Выборочный сбор | UC-03: Выборочный сбор типов | UC-INC-01, UC-INC-02, UC-INC-03, UC-INC-04 |
| US-04: Объединение для анализа | UC-04: Объединение | UC-INC-01, UC-INC-02 |
| US-05: Разные методы сбора | UC-05: Гибридный сбор | UC-INC-01, UC-INC-02, UC-INC-03 |
| US-06: Асинхронный сбор | UC-06: Асинхронный сбор | UC-INC-01, UC-INC-02 |
Inventory/ # Корневой каталог развертывания
├── Docs/ # Документация
├── Src/ # Исходный код
│ ├── Results/ # Результаты сбора инвентаризационной информации
│ │ ├── InvAnyComputers/ # Инвентаризационная информация по компьютерам
│ │ ├── InvResult/ # Итоговые файлы инвентаризационной информации
│ │ └── Logs/ # Логи выполнения сбора инвентаризационной информации
│ ├── Report/ # Отчеты
│ │ ├── inv.xlsm # Шаблон Excel
│ │ └── inv.html.styles.css # Стили HTML
│ ├── Modules/ # Модули командлета для сбора инвентаризационной информации
│ │ ├── Get-Inventory-Module/ # Модули сбора инвентаризационной информации (FR-06)
│ │ │ ├── dsk.ps1 # Логические диски (тип dsk)
│ │ │ ├── evt.ps1 # События системы (тип evt)
│ │ │ ├── gpu.ps1 # Графические адаптеры (тип gpu)
│ │ │ ├── grp.ps1 # Состав локальных групп (тип grp)
│ │ │ ├── hdd.ps1 # Физические диски (тип hdd)
│ │ │ ├── hfx.ps1 # Установленные обновления ОС (тип hfx)
│ │ │ ├── hwr.ps1 # Аппаратная конфигурация (тип hwr)
│ │ │ ├── map.ps1 # Подключенные сетевые диски (тип map)
│ │ │ ├── mnt.ps1 # Информация о подключенных мониторах (тип mnt)
│ │ │ ├── net.ps1 # Сетевые интерфейсы (тип net)
│ │ │ ├── pci.ps1 # PCI устройства (тип pci)
│ │ │ ├── prf.ps1 # Профили пользователей (тип prf)
│ │ │ ├── ram.ps1 # Модули памяти (тип ram)
│ │ │ ├── shr.ps1 # Общие ресурсы (тип shr)
│ │ │ ├── svc.ps1 # Службы ОС (тип svc)
│ │ │ ├── swr.ps1 # Установленное ПО (тип swr)
│ │ │ ├── tsk.ps1 # Задания планировщика (тип tsk)
│ │ │ ├── usr.ps1 # Локальные пользователи (тип usr)
│ │ │ └── reg.ps1 # Значения параметров реестра (тип reg)
│ | ├── Get-Inventory.ps1 # Основной командлет сбора инвентаризационной информации
│ | ├── CheckFolder.ps1 # Проверка используемых каталогов
│ | ├── CheckLogFile.ps1 # Проверка возможности ведения файла протокола
│ | ├── CheckOU.ps1 # Проверка параметра InvOU (OU AD)
│ | ├── CreateResult.ps1 # Формирование итоговых файлов с результатами инвентаризации
│ | ├── DeleteOld.ps1 # Удаление старых файлов инвентаризации
│ | ├── Get-Computer.ps1 # Получение перечня компьютеров в домене
│ | ├── Get-FolderAccess.ps1 # Получение разрешений NTFS для каталога, включая вложенные каталоги
│ | ├── InvLocal.ps1 # Локальный сбор инвентаризации
│ | ├── InvType.ps1 # Формирование справочника типов инветаризации
│ | ├── ListComputers.ps1 # Получения перечня компьютеров с которых будет выполнен сбор
│ | ├── PollComputers.ps1 # Удаленный сбор инвентаризации
│ | ├── SelectInvType.ps1 # Выбор типов собираемой информатизации
│ | ├── UnZIP.ps1 # Распаковка ZIP архивов с файлами инвентаризации
│ | ├── WriteLog.ps1 # Запись в лог файл
│ ├── InvLocal.cmd # Командный файл запуска InvLocal.ps1
│ ├── InvLocal.ps1 # Скрипт-обертка для локального сбора
│ ├── InvRemote.ps1 # Скрипт-обертка для удаленного сбора
│ ├── InvWork.ps1 # Скрипт-обертка для обработки
│ ├── Start-Inventory.psm1 # Главный командлет (FR-01)
│ └── Start-Inventory.psd1 # Манифест модуля
Система включает 19 модулей сбора. Каждый модуль представляет собой скрипт PowerShell (.ps1) в каталоге Src\Get-Inventory-Module\ и отвечает за сбор одного типа информации.
| Код | Наименование типа | Файл модуля | Краткое описание (Источник информации) |
|---|---|---|---|
| hwr | Аппаратная конфигурация | hwr.ps1 |
Сводные информация о системе: модель, ОС, процессор, память, сеть. Источники: WMI (Win32_ComputerSystem, Win32_Processor), реестр. |
| swr | Установленное ПО | swr.ps1 |
Перечень установленных программ. Источник: реестр. |
| net | Сетевые адаптеры | net.ps1 |
Активные сетевые интерфейсы и их конфигурация (IP, MAC, DHCP). Источник: WMI (Win32_NetworkAdapterConfiguration). |
| dsk | Логические диски | dsk.ps1 |
Логические разделы, файловые системы, размер и свободное место. Источник: WMI (Win32_LogicalDisk). |
| hdd | Физические диски | hdd.ps1 |
Физические накопители (HDD, SSD): модель, размер, интерфейс. Источник: WMI (Win32_DiskDrive). |
| ram | Оперативная память | ram.ps1 |
Модули ОЗУ: размер, тип, расположение. Источник: WMI (Win32_PhysicalMemory). |
| svc | Службы Windows | svc.ps1 |
Состояние, тип запуска и учетная запись служб. Источник: WMI (Win32_Service). |
| hfx | Обновления ОС (Hotfix) | hfx.ps1 |
Установленные обновления Windows. Источник: WMI (Win32_QuickFixEngineering). |
| usr | Локальные пользователи | usr.ps1 |
Учетные записи локальных пользователей. Источник: WMI (Win32_UserAccount). |
| grp | Состав локальных групп | grp.ps1 |
Членство в локальных группах. Источник: WMI (Win32_GroupUser). |
| prf | Профили пользователей | prf.ps1 |
Информация о загруженных профилях. Источник: реестр (HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList). |
| shr | Общие сетевые ресурсы | shr.ps1 |
Общие папки и их разрешения (NTFS/SMB). Источник: WMI (Win32_Share). |
| map | Подключенные сетевые диски | map.ps1 |
Сопоставленные сетевые диски. Источник: реестр (HKCU\Network). |
| tsk | Задания планировщика | tsk.ps1 |
Задания из Планировщика Windows. Источник: COM-объект Schedule.Service. |
| gpu | Графические адаптеры | gpu.ps1 |
Видеокарты и их память. Источник: WMI (Win32_VideoController). |
| mnt | Мониторы | mnt.ps1 |
Подключенные мониторы. Источник: WMI (Win32_DesktopMonitor). |
| pci | PCI устройства | pci.ps1 |
Устройства на шине PCI. Источник: WMI (Win32_PnPEntity). |
| reg | Значения реестра | reg.ps1 |
Значения заданных параметров реестра. Источник: реестр. |
| evt | События включения/выключения | evt.ps1 |
События загрузки и выключения из журнала System. Источник: Get-WinEvent. |
Местоположение: Каталог InvFolderAnyComputers
Формат имени: MMMM.TTT.csv
MMMM- имя компьютера (NetBIOS имя), например:SRV01,PC-USER01.TTT- трехсимвольный код типа инвентаризационной информации, например:hwr,swr,net.- Расширение файла:
.csv
Примеры имен файлов:
SRV01.hwr.csv- инвентаризационная информация аппаратной конфигурации компьютера SRV01.PC-USER01.swr.csv- инвентаризационная информация установленного ПО компьютера PC-USER01.WS01.net.csv- инвентаризационная информация сетевых интерфейсов компьютера WS01.
Местоположение: Каталог InvFolderResult
Формат имени: TTT.csv
TTT- трехсимвольный код типа инвентаризационной информации.- Расширение файла:
.csv
Примеры имен файлов:
hwr.csv- консолидированная инвентаризационная информация аппаратной конфигурации всех компьютеров.swr.csv- консолидированная инвентаризационная информация установленного ПО всех компьютеров.net.csv- консолидированная инвентаризационная информация сетевых интерфейсов всех компьютеров.
Местоположение: Каталог InvFolderLog
Формат имени: Inv_YYYY-MM-DD.log
YYYY- год (4 цифры)MM- месяц (2 цифры)DD- день (2 цифры)- Расширение файла:
.log
Примеры имен файлов:
Inv_2025-10-15.log- лог сбора от 15 октября 2025 года.Inv_2025-10-16.log- лог сбора от 16 октября 2025 года.
Местоположение: Каталог InvFolderLog
Формат имени: Inv_MMMM.log
MMMM- имя компьютера (NetBIOS имя), например:SRV01,PC-USER01- Расширение файла:
.log
Примеры имен файлов:
Inv_SRV01.log- лог сбора компьютера SRV01.Inv_PC-USER01.log- лог сбора компьютера PC-USER01.
Автоматическая ротация:
- Для удаленного сбора и обработки информации: Создание нового файла ежедневно, удаление старых файлов (храниться 20 последних файлов).
- Для локального сбора: Файл создается для компьютера, при достижение размера 20кБ, файл пересоздается.
Местоположение: Каталог InvFolderZIPFiles
Формат имени: inv.MMMM.zip
MMMM- имя компьютера
Примеры имен файлов:
inv.PC01.zip- архив инвентаризационной информации от компьютера PC01.inv.LAPTOP05.zip- архив инвентаризационной информации от компьютера LAPTOP05.
- Инвентаризационная информация: CSV с кодировкой UTF-8, разделитель - запятая.
- Логи сбора инвентаризационной информации: CSV с кодировкой UTF-8, разделитель - точка с запятой.
- Консистентность: Все файлы одного типа (
hwr.csv,swr.csvи т.д.) должны иметь идентичный набор столбцов (схему) для всех версий системы. - Целостность: Обязательные поля не должны быть пустыми.
- Уникальность:
- Для каждого типа инвентаризационной информации должен существовать только один соответствующий файл содержащий информацию одного типа.
- В файле с одним типом информации по конкретному компьютеру содержится вся полученная информация от соответствующего модуля сбора.
- Уникальность возвращаемых информации обеспечивается на стороне модуля сбора.
Командлет: Start-Inventory.
Модуль: Start-Inventory.psm1.
Расположение: Inventory\Src\Start-Inventory.psm1.
Зависимости: PowerShell 3.0+, модуль ActiveDirectory (для работы с AD).
Назначение: Основной управляющий командлет системы, обеспечивающий запуск всех сценариев сбора, обработки и консолидации инвентаризационной информации.
Принцип работы: Командлет выступает в качестве фасада, инкапсулируя сложную логику взаимодействия с модулями сбора, Active Directory и файловой системой за простым интерфейсом.
| Параметр | Тип | Значение по умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
| -StartType | [String] | "InvRemoteCreateResult" | "InvRemote", "InvLocal", "CreateResult", "InvRemoteCreateResult" | Основной режим работы системы. Определяет тип выполняемой операции. |
| -SelectInvType | [String[]] | Все доступные типы (если параметр не указан) | Массив из трехсимвольных кодов: "hwr", "swr", "net", "dsk", "hdd", "ram", "svc", "hfx", "usr", "grp", "prf", "shr", "map", "tsk", "gpu", "mnt", "pci", "reg", "evt". Специальное значение "select" |
Выбор типов инвентаризационной информации для сбора. Специальное значение "select" - интерактивный выбор. |
| -InvComputerList | [String] | $null | 1) Список имен через запятую 2) "file:путь_к_файлу.csv" |
Источник списка компьютеров для сбора. Префикс "file:" указывает на CSV-файл со списком (заголовок в файле ComputerName). |
| -InvOU | [String] | $null | DistinguishedName OU в Active Directory (например, "OU=Workstations,DC=company,DC=local") | Организационное подразделение Active Directory, из которого получается список компьютеров. |
| -InvFolderAnyComputers | [String] | ".\InvAnyComputers" | Локальный или UNC-путь к каталогу | Каталог для хранения информации по отдельным компьютерам (файлы ИмяПК.ТТТ.csv). |
| -InvFolderResult | [String] | ".\InvResult" | Локальный или UNC-путь к каталогу | Каталог для консолидированных результатов (файлы ТТТ.csv). |
| -InvFolderLog | [String] | Локальный или UNC-путь к каталогу | Каталог для логов выполнения. | |
| -InvFolderZIPFiles | [String] | Локальный или UNC-путь к каталогу | Каталог для ZIP-архивов от автономных компьютеров. Проверка актуальности информации при локальном сборе. | |
| -DayOld | [Int32] | 30 | Целое число ≥ 0 | Максимальный возраст файлов (в днях): при локальном сборе – для пропуска сбора, если информация не старше N дней; при удаленном сборе - при получении списка компьютеров из OU (компьютеры активные в течении N дней); при консолидации – для удаления файлов в InvFolderAnyComputers старше N дней. |
| -InvRemoteDayOld | [Int32] | 0 | Целое число ≥ 0 | Проверка актуальности информации при удаленном сборе. Если информация младше указанного значения, сбор пропускается. 0 = не проверять. |
| -ExtendLog | [Boolean] | $false | $true, $false | Включение расширенного логирования. Добавляет детальную информацию о выполнении каждого модуля. |
| -ModuleParameters | [Hashtable[]] | @() | Массив хэш-таблиц:@{Module="код"; VarName="Имя переменной в модуле"; VarValue="Значение переменой"} |
Дополнительные параметры для модулей сбора. Позволяет тонкую настройку отдельных модулей. |
Назначение: Удаленный сбор инвентаризационной информации с указанных компьютеров
Требования:
- Доступ к Active Directory (при использовании
-InvOU) - Запущенная служба WinRM на целевых компьютерах
- Административные права на целевых компьютерах
Поведение:
- Получение списка компьютеров (из
-InvOU,-InvComputerListили текущего OU) - Проверка доступности каждого компьютера
- Сбор информации через WinRM/CIM
- Проверка актуальности информации (если указан
-InvRemoteDayOld) - Сохранение результатов в
InvFolderAnyComputers
Назначение: Локальный сбор информация на компьютере, где запущен командлет
Требования: Права доступа к WMI и реестру (обычно SYSTEM)
Поведение:
- Сбор инвентаризационной информации с локального компьютера
- Сохранение в
InvFolderAnyComputers(сетевой или локальный путь) - При указании
-InvFolderZIPFiles- упаковка в ZIP-архив - Проверка актуальности информации (если указан
-DayOld)
Назначение: Обработка и консолидация собранной инвентаризационной информации
Требования: Наличие файлов в InvFolderAnyComputers
Поведение:
- Обработка ZIP-архивов из
InvFolderZIPFiles - Удаление старых файлов (старше
-DayOld) - Объединение CSV-файлов по типам информации
Назначение: Комбинированный сценарий - сбор + обработка.
Поведение: Сначала выполняется сбор инвентаризационной информации со всех целевых компьютеров (как в InvRemote), а после завершения цикла сбора автоматически запускается процедура консолидации (как в CreateResult).
Формат CSV:
ComputerName
PC-001
SRV-01Структура хэш-таблицы:
$params = @(
@{
Module = "TTT" # Обозначение модуля (три символа)
VarName = "Var" # Имя переменной в модуле
VarValue = 0 # Значение переменной
}
)Поддерживаемые модули и параметры:
-
Module = "shr" (Общие ресурсы)
-
Глубина сбора NTFS-разрешений
VarName = "DepthChildFolder"VarValue = [Int32]- -1 - Не получать NTFS разрешения для каталогов общих ресурсов
- 0 - Получить NTFS разрешения для каталогов общих ресурсов без вложенных каталогов
- 1 - Получить NTFS разрешения для каталогов общих ресурсов и вложенных каталогов первого уровня
- X - Получить NTFS разрешения для каталогов общих ресурсов и вложенных каталогов x уровня
-
Глубина сбора NTFS-разрешений для конкретных компьютеров
VarName = "DepthAnyComputer"VarValue = "@(("PatternName", X), ("ComputerName", X))"- массив с перечнем компьютеров с уровнем вложенностиComputerName- имя компьютераX- значение вложенностиPatternName- использование маски в имени компьютера (возможные варианты для оператора -like)- Если компьютер перечислен в нескольких значениях (в том числе по маске) - будет использоваться последнее значение
Передача параметра:
$moduleParams = @( @{ Module = "shr"; VarName = "DepthChildFolder"; VarValue = X }, @{ Module = "shr"; VarName = "DepthAnyComputer"; VarValue = @(("PatternName", X), ("ComputerName", X)) } )
-
-
Module = "reg" (Значение ключей реестра)
-
VarName = "Reg" -
VarValue = @(@{HKey, Key, ValueName})- массив хэш таблиц- HKey - раздел реестра ("HKEY_USERS", "HKEY_LOCAL_MACHINE", "HKEY_CURRENT_USER", "HKEY_CLASSES_ROOT", "HKEY_CURRENT_CONFIG")
- Key - наименование ключа
- ValueName - наименование параметра
- Если
ValueNameне указан, собираются все значения ключа, включая вложенные
Передача параметра:
$moduleParams = @( @{ Module = "reg"; VarName = "reg"; VarValue = @( @{HKey = ""; Key = ""}, @{HKey = ""; Key = ""}, @{HKey = ""; Key = ""; ValueName = ""} ) } )
-
Пример 1: Полный сбор по домену с обработкой информации и поддержкой актуальности данных при выполнении консолидации
Start-Inventory -StartType InvRemoteCreateResult `
-InvOU "OU=Workstations,DC=company,DC=local" `
-InvFolderAnyComputers "\\server\inventory\InvAnyComputers" `
-InvFolderResult "\\server\inventory\InvResult" `
-InvFolderLog "\\server\inventory\Logs" `
-DayOld 30Пример 2: Локальный сбор для автономного компьютера и проверкой наличия актуальных файлов инвентаризации
Start-Inventory -StartType InvLocal `
-InvFolderAnyComputers "C:\Inventory\InvAnyComputers" `
-InvFolderZIPFiles "C:\Inventory\ZIP" `
-DayOld 7Start-Inventory -StartType InvRemote `
-InvComputerList "file:C:\Audit\computers.csv" `
-SelectInvType "swr", "hfx" Start-Inventory -StartType InvRemote `
-InvOU "OU=Workstations,DC=company,DC=local" `
-InvFolderAnyComputers "\\server\inventory\InvAnyComputers" `
-InvFolderResult "\\server\inventory\InvResult" `
-SelectInvType select $moduleParams = @(
@{ Module = "shr"; VarName = "DepthChildFolder"; VarValue = 1 }, #уровень вложенности получения прав для всех общих ресурсов "1"
@{ Module = "shr"; VarName = "DepthAnyComputer"; VarValue = @(("fs*", 2), ("Server2", 3)) } #для компьютеров имя которых начинается на fs уровень "2", для компьютера Server2 уровень "3"
)
Start-Inventory -StartType InvRemote `
-InvOU "OU=Workstations,DC=company,DC=local" `
-InvFolderAnyComputers "\\server\inventory\InvAnyComputers" `
-InvFolderResult "\\server\inventory\InvResult" `
-ModuleParameters $moduleParams $moduleParams = @(
@{
Module = "reg";
VarName = "reg";
VarValue = @(
@{HKey = "HKEY_CURRENT_USER"; Key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"}, #собрать все значения включая вложенные ключи
@{HKey = "HKEY_CURRENT_USER"; Key = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"}, #собрать все значения включая вложенные ключи
@{HKey = "HKEY_USERS"; Key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings"; ValueName = "AutoConfigURL"} #собрать значение параметра AutoConfigURL
)
}
)
Start-Inventory -StartType InvRemote `
-InvOU "OU=Workstations,DC=company,DC=local" `
-InvFolderAnyComputers "\\server\share\Inventory\InvAnyComputers" `
-InvFolderResult "\\server\share\Inventory\Results" `
-ModuleParameters $moduleParams - Для удаленного сбора инвентаризационной информации требуется учетная запись с административными правами на целевых компьютерах
- Система должна поддерживать различные методы аутентификации:
- Kerberos (рекомендуется для доменных сред)
- NTLM (для рабочих групп и устаревших систем)
- Файлы инвентаризационной информации должны храниться с ограничением доступа в соответствии с принципом наименьших привилегий
- Права NTFS на каталогах с информации должны соответствовать матрице прав (NFR-09)
Матрица прав доступа к каталогам:
| Каталог | Группа "IT-менеджеры" | Группа "Администраторы" | Система |
|---|---|---|---|
InvAnyComputers |
Чтение/Запись | Полный доступ | Полный доступ |
InvResult |
Чтение/Запись | Полный доступ | Полный доступ |
InvFolderLog |
Чтение/Запись | Полный доступ | Полный доступ |
InvFolderZIPFiles |
Чтение/Запись | Полный доступ | Полный доступ |
Src\Modules |
Чтение/Выполнение | Полный доступ | Полный доступ |
- Логи не должны содержать пароли и другую чувствительную инвентаризационную информацию.
- Детальное логирование всех операций сбора инвентаризационной информации.
- Фиксация времени, источника и результата сбора инвентаризационной информации.
- Отдельное логирование ошибок и предупреждений при сборе инвентаризационной информации.
Формат записей лога:
[ГГГГ-ММ-ДД ЧЧ:ММ:СС];[Компьютер];[Модуль];[Сообщение]
Примеры записей:
2025.04.02 14:08:01;Server1;Start-Inventory.psm1;Запуск процедуры сбора
2025.04.02 14:08:01;Server1;CheckFolder.ps1;Не задан параметр -InvFolderResult. Будет использоваться каталог C:\SHARE\Inventory\InvResult.
2025.04.02 14:08:03;Server1;ListComputers.ps1;Получен перечень компьютеров из OU OU=Computers,DC=domain1,DC=local. Количество: 6
2025.04.02 14:08:03;Server1;PollComputers.ps1;Проверяем доступность компьютера Computer1
2025.04.02 14:08:04;Server1;PollComputers.ps1;Компьютер Computer1 доступен по сети True доступно управление через WinRM True
2025.04.02 14:08:04;Server1;PollComputers.ps1;Опрашиваем Computer1
- Создание сетевого каталога для хранения инвентаризационной информации
- Настройка разрешений NTFS на каталогах для защиты инвентаризационной информации
- Установка модуля PowerShell на компьютер-сборщик инвентаризационной информации
- Настройка WinRM на целевых компьютерах (для удаленного сбора инвентаризационной информации)
- Настройка службы WinRM может быть выполнена с помощью доменных политик, либо локально с использованием команды:
winrm quickconfig
- Настройка службы WinRM может быть выполнена с помощью доменных политик, либо локально с использованием команды:
- Система функционирует только в среде ОС семейства Windows (клиентские и серверные версии, указанные в п. 3.1). Сбор данных с Unix-подобных систем не поддерживается.
- Для удаленного сбора обязательно наличие настроенного и доступного WinRM на целевых компьютерах. Система не выполняет настройку WinRM, а только проверяет его доступность (UC-INC-04).
- Система не имеет собственной базы данных. Роль хранилища выполняет файловая система (сетевой каталог). Это накладывает ограничения на скорость поиска и сложность выборок больших объемов данных без использования внешних инструментов (Excel/Power Query).
- При использовании гибридного сбора из нескольких доменов или изолированных сетей система не разрешает коллизий имен. При совпадении NetBIOS-имен компьютеров файлы более позднего сбора перезаписывают предыдущие (UC-05, Исключение 3).
- Система не обеспечивает сбор информации в реальном времени. Данные всегда отражают состояние на момент выполнения скрипта сбора.
- Система не поддерживает обратную связь с компьютером (удаленное исполнение команд, изменение конфигурации, установка ПО). Она предназначена исключительно для чтения инвентаризационной информации.
- Качество и полнота данных зависят от работоспособности WMI и реестра Windows на целевых компьютерах. Система не восстанавливает поврежденные компоненты WMI.
- При удаленном сборе большого количества компьютеров (более 150-200) за один сеанс рекомендуется использовать параметр
-InvRemoteDayOldдля исключения часто опрашиваемых машин и снижения нагрузки на сеть (NFR-02). Так же рекомендуется использовать процедуру асинхронного сбора (UC-06), создавая задания в планировщике с использованием доменных политик. - Время сбора на одном компьютере может превышать 5 минут (NFR-01) при слабой аппаратной конфигурации (менее 4 ядер CPU, 8 ГБ RAM) или при сборе большого объема данных (например, глубокий анализ NTFS-прав через модуль
shr).
Файлы диаграмм последовательности в формате PlantUML расположены в каталоге diagrams.
UC-01 (Удаленный сбор инвентаризационной информации со всего домена)
UC-02 (Локальный сбор инвентаризационной информации с автономного компьютера)
UC-03 (Выборочный сбор определенных типов инвентаризационной информации)
UC-04 (Объединение инвентаризационной информации для анализа)
UC-05 (Гибридный сбор из разных доменов и сегментов сети)
UC-06 (Асинхронный сбор с сетевых компьютеров)
UC-INC-01 (Проверка и подготовка инфраструктуры)
UC-INC-02 (Проверка актуальности информации)
UC-INC-03 (Получение перечня компьютеров)
UC-INC-04 (Проверка доступности компьютера)
UC-INC-05 (Валидация типов собираемой информации)
