Для программы ITInvent, которая использует СУБД MS SQL.
Описание некоторых таблиц:
BRANCHES - Филиалы;
VENDORS - Общие - Производители;
CI_TYPES - Оборудование - Типы;
CI_MODELS - Оборудование - Модели;
OWNERS - Общие - Сотрудники;
USERS - Общие - Пользователи (учетные записи);
CI_HISTORY - история изменений в карточках (CH_USER, CH_DATE, CH_COMMENT, SERIAL_NO_OLD, SERIAL_NO_NEW, INV_NO_OLD, INV_NO_NEW).
Таблица, которая нас интересует - ITEMS. Содержимое столбцов:
DESCR - Описание карточки;
ADDINFO - Примечание (вкладка Дополнительно);
SERIAL_NO - Серийный номер;
INV_NO - Инвентарный номер;
LICENCE_DATE - Лицензия До;
LICENCE_NO - Порядковый номер лицензии;
LICENCE_MAX - Общее количество лицензий;
CREATE_DATE - дата создания (первая дата изменения в истории, т.е. добавления);
CH_DATE - Дата Изменения (вкладка История);
CH_USER - Изменил (вкладка История, имя пользователя);
PRODUCT_KEY - Ключ продукта/Рег. имя;
ACTIVATION_CODE - Код активации.
Зависимые столбцы:
CI_TYPE - Номер 2, означает тип "Программы";
TYPE_NO - Название. Значение (39), которое ссылается на значене столбца TYPE_NAME (Adobe) в таблице CI_TYPES по такому же номеру стобца TYPE_NO (39) и фильтрует по номеру столбца CI_TYPE (2);
MODEL_NO - Версия. Значение, которое ссылается на значене столбца MODEL_NAME в таблице CI_MODELS по такому же номеру стобца MODEL_NO и TYPE_NO.
Для формирования таблицы, в которой содержится название и версия программы, необходимо собрать значения из нескольки таблиц.
Отфильтровать таблицу TYPE_NO по номеру типа "Программы" (CI_TYPE), т.к. номера для тругих типов (оборудование, комплектующие и т.п.) повторяются и соот-но пересекаются:
SELECT TYPE_NO,TYPE_NAME FROM ITINVENT.dbo.CI_TYPES where CI_TYPE like '2'
Отфильтровать таблицу CI_MODELS:
SELECT MODEL_NO,MODEL_NAME FROM ITINVENT.dbo.CI_MODELS where CI_TYPE like '2'
Отфильтрвоать таблицу ITEMS, где отсутствует пустые значения в стобце LICENCE_DATE:
SELECT LICENCE_DATE,ADDINFO,DESCR FROM ITINVENT.dbo.ITEMS where LICENCE_DATE IS NOT NULL
Выбираем модуль, я использую System.Data.SqlClient, который присутствует в классе .NET (не требует установки). Так же выбираем метод аутентификации, по умолчанию подключение к БД будет происходить из под доменной учетной записи, от которой запущен powershell (с применением Integrated Security=True), или, можно указать учетную запись в самом скрипте. Забираем две таблицы: $db_type и $db_model, при формировании итоговой таблицы ITEMS (переменная $db_date) удаляем время и подставляем значения из первых двух, заменив содержимое значений с помощью select.
Данные в ITInvent (которые используются в текущем примере):
ITInvent-SQL-Alert-Table.ps1 - вывести полученные данные в Out-GridView:
За основу беру метод оповещений из Excel. Проверяется четыре триггерных значения: 30, 14, 7 и 3 дня (дата, на момент проверки: 17.01.2023).
ITInvent-SQL-Alert-Telegram.ps1
Если срок действия уже просрочен (дата имеет отрицательное значение), то отправка оповещений будет производиться ежедневно.
ITInvent-SQL-Alert-Console.ps1.