База знаний Зодиак.АйТиЭм

Файловая инвентаризация

Для ОС семейства Windows и Linux

Описание

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

Максимально локализуйте область поиска и состав атрибутов файлов, возвращаемых на сервер.

Windows

Наиболее удобными для проведения файловой инвентаризации на ОС семейства Windows являются скрипты на языке PowerShell. Командлет Get-ChildItem содержит большое количество опций, позволяющих управлять составом своего результата.

Документация по командлету Get-ChildItem доступна на официальном сайте Microsoft.

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

Версионная информация файла - это набор атрибутов, содержащихся в заголовках исполняемых файлов и файлов-библиотек для ОС семейства Windows. Этот набор атрибутов задается разработчиками на этапе создания файла и не меняется при переменованиях и перемещениях файла. Данный набор атрибутов может использоваться для определения версии файла, принадлежности к тому или иному продукту, оригинального имени файла, и пр.

# Скрипт проводит поиск файлов в заданной папке с учетом настроек.
# Возвращает массив объектов (объект - на каждый файл) вида:
# @{
#   'Name' = 'имя файла'
#   'Path' = 'путь до файла'
#   'OriginalName' = '(опционально из FileVersionInfo)'
#   'Description' = '(опционально из FileVersionInfo)'
#   'FileVersion' = '(опционально из FileVersionInfo)'
#   'ProductVersion' = '(опционально из FileVersionInfo)'
#   'ProductName' = '(опционально из FileVersionInfo)'
# }

# ----- Настройки поиска ----- #

# Папка
$folder = 'C:\Program Files\';

# Признак поиска во вложенных папках
$recursive = $true;

# Фильтр
$filter = '*.exe';

# Максимальное число возвращаемых файлов
$amount = 50;

# Признак включения полей из FileVersionInfo
$includeFileVersionInfo = $true;

# ----- Алгоритм ----- #

if ($recursive) {
  $items = Get-ChildItem -Path $folder -Filter $filter -Recurse | Select-Object -First $amount
}
else {
  $items = Get-ChildItem -Path $fullPath | Select-Object -First $amount;
}

$files = @();
foreach ($item in $items) {
  $file = @{
    Name = $item.Name;
    Path = $item.FullName;
  }
  
  if ($includeFileVersionInfo) {
    $versionInfo = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($item.FullName);
    $file.OriginalName = $versionInfo.OriginalFilename;
    $file.Description = $versionInfo.FileDescription;
    $file.FileVersion = $versionInfo.FileVersion;
    $file.ProductVersion = $versionInfo.ProductVersion;
    $file.ProductName = $versionInfo.ProductName;
  }
  
  $files += $file;
}
$files

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

Для настройки доставки результатов инвентаризации на серверы Зодиак.АйТиЭм переведите переключатель "Результат" во включенное положение и добавьте следующие свойства:

Обязательные свойства
Собираются скриптом вне зависимости от значений конфигурационных параметров

Опциональные свойства
Собираются скриптом при задании параметра $includeFileVersionInfo = $true;

Linux

Наиболее привычными для Администраторов ОС семейства Linux являются Shell-скрипты.

Интерпретаторы Shell-скриптов в ОС семейства Linux не содержат логики поиска и перечисления файлов. Для данных задач используются консольные утилиты, запускаемые из скриптов.

В приведенном ниже примере используется утилита find, доступная в подавляющем большинстве дистрибутивов Linux.

Документация по утилите find доступна на портале системных руководств OpenNet.

Ниже приведен пример скрипта с выделенными конфигурационными переменными, позволяющими настроить его поведение для требуемого сценария. С параметрами по-умолчанию скрипт производит рекурсивный поиск всех исполняемых файлов в папке /usr/lib/libreoffice/.

В ОС семейства Linux отсутствует понятие версионной информации о файле. Поэтому идентификация файла осуществляется только по его имени и пути.

# Скрипт проводит поиск файлов в заданной папке с учетом настроек.
# Для каждого найденного файла:
# - свойства выводятся каждое отдельной строкой в формате env
# - список свойств отделяется пустой строкой

# ----- Настройки поиска ----- #

# Папка
path="/usr/lib/libreoffice/"

# Разрешения
perm="-u=x,g=x,o=x"

# ----- Алгоритм ----- #

find -L $path -type f -perm $perm 2>/dev/null |
while read -r line
do
  fname=$line
  xpath=${fname%/*}
  xbase=${fname##*/}
  echo "path: $xpath"
  echo "name: $xbase"
  echo ""
done

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

Для настройки доставки результатов инвентаризации на серверы Зодиак.АйТиЭм переведите переключатель "Результат" во включенное положение и добавьте следующие свойства: