вторник, 30 марта 2021 г.

[Fast] DrWeb ESS. Получаем список ПО

 

Приветствую, уважаемый читатель!

Сегодня расскажу, как можно с использованием PowerShell быстро получить из БД сервера управления DrWeb список программного обеспечения, установленного на компьютере. 

 

Если вы выбрали вариант с интегрированной БД, то сам файл БД (SQLite) находится тут - C:\Program Files\DrWeb Server\var\database.sqlite

1. Получаем список всех компьютеров и уникальные идентификаторы компьютеров (в таблице cat_name_stations хранится доменное имя всех компьютеров, а в таблице station_logins уникальные ID):

 

add-type -Path "C:\Program Files\System.Data.SQLite\2010\bin\System.Data.SQLite.dll"

$connect = New-Object -TypeName System.Data.SQLite.SQLiteConnection

$connect.ConnectionString = "Data Source='C:\drweb\database.sqlite'"

$connect.Open()

 $sql = $connect.CreateCommand()

$sql.CommandText = "SELECT station_logins.id,cat_name_stations.str FROM station_logins INNER JOIN cat_name_stations ON cat_name_stations.id=station_logins.name;"

$adapter = New-Object -TypeName System.Data.SQLite.SQLiteDataAdapter $sql

$data1 = New-Object System.Data.DataSet

$adapter.Fill($data1)

 $id_arm = $data1.tables.rows

 $sql.Dispose()

$connect.Close()

 

$id_arm = $ id_arm | select id,str –Unique

   

2. Получаем описание строковых наименований, которые использует сервер (название ПО, вендор ПО и т.д.):

$sql1 = $connect.CreateCommand()

$sql1.CommandText = "SELECT * FROM env_strings;"

$adapter_descr = New-Object -TypeName System.Data.SQLite.SQLiteDataAdapter $sql1

$data_descr = New-Object System.Data.DataSet

$adapter_descr.Fill($data_descr)

 

$rows_descr = $data_descr.tables.rows

$sql1.Dispose()

  

3. Получаем полный состав программного обеспечения на компьютерах (список установленного ПО хранится в этой таблице - station_env_sw)

  

$sql = $connect.CreateCommand()

$sql.CommandText = "SELECT * FROM station_env_sw;"

$adapter = New-Object -TypeName System.Data.SQLite.SQLiteDataAdapter $sql

$data1 = New-Object System.Data.DataSet

$adapter.Fill($data1)

$rows = $data1.tables.rows

 

foreach($row in $rows) {

        foreach($id in $id_arm) {

            if($row.id -eq $id.id) {

                $name_station = $id.str

             }

        }

        

 foreach($row_d in $rows_descr) {

            if($row.name -eq $row_d.id) {

               $name_soft = $row_d.str

            }           

            if($row.version -eq $row_d.id) {

               $ver_soft = $row_d.str

            }           

            if($row.vendor -eq $row_d.id) {

               $vendor_soft = $row_d.str

            } 

        }

              '{0} | {1} | {2} | {3};' -f $name_station,$name_soft,$ver_soft,$vendor_soft

  }

 

Результат выполнения приведен ниже:


Всем удачи!



Комментариев нет:

Отправить комментарий