Разработка автоматической системы инвентаризации IT-активов и оборудования

Выбор средств разработки системы автоматизации учета парка компьютерной техники. Применение принципов инвентаризации и автоматизации. Алгоритм работы скриптов для сбора информации о персональных компьютерах сети. Разработка программного обеспечения.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 07.08.2018
Размер файла 6,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

· для сборки проектов применяется популярная система Gradle. С одной стороны, она позволяет инкапсулировать в плагинах особенности построения CUBA-приложений, а с другой дает неограниченные возможности кастомизации написанных на Groovy скриптов сборки;

· модуль BPM [13] основан на Activiti и предоставляет средства для создания, исполнения и управления процессами с поддержкой стандарта BPMN 2.0;

· фреймворк Apache Lucene, являющийся де-факто стандартом реализации полнотекстового поиска, используется в дополнительном модуле FTS (full-textsearch).

Генератор отчетов

Генератор отчетов (Reports) позволяет создавать шаблоны в привычных и доступных всем средах (Microsoft Office и Libre/OpenOffice) (рис. 2.4) и описывать источники данных в интерфейсе приложения используя модель данных приложения, SQL, JPQL или исполняемые скрипты. С помощью генератора отчетов возможно:

· быстро создавать шаблоны отчетов непосредственно из приложения с помощью пошагового визарда;

· формировать отчеты в DOC, DOCX, ODT, XLS, XLSX, HTML и произвольных тектовых форматах;

· создавать XLS(X) отчеты сложной структуры - многоуровневые, с агрегацией данных или перекрестными таблицами;

· использовать графики и формулы в XLS(X) отчетах;

· конвертировать отчеты из офисных форматов или HTML в PDF.

Рис. 2.4- Отчеты в CubaPlatform

Возможности:

· встроенный дизайнер процессов;

· интегрированная модель данных - модель данных Activiti обернута в сущности CUBA, что позволяет использовать ее в интерфейсе и логике приложения;

· процессные формы - удобный способ отображать действия и назначения пользователю при исполнении процесса;

· UI для управления моделями процессов, активными процессами и назначениями;

· подмодели - созданные ранее модели процессов можно использовать в составе других моделей;

· локализация;

Рис. 2.5- Конструктор бизнес-процессов CubaPlatform

Диаграммы и карты.

Модуль Диаграммы (charts) поддерживает более 20 интерактивных диаграмм. Возможности:

· стандатные диаграммы: круговая диаграмма, гистограмма, график, воронка и т.д.;

· сложные диаграммы: биржевая диаграмма, диаграмма Гантта;

· поддержка модели и источников данных CUBA;

· полный доступ к API диаграмм из XML и серверного Java кода;

· частичное обновление данных диаграмм без полной перерисовки.

Модуль основан на популярной библиотеке amCharts. По умолчанию, диаграммы будут содержать полупрозрачный логотип, который можно убрать, купив коммерческую лицензию amCharts.

Модуль Карта (map) является специальным визуальным компонентом, оборачивающим GoogleMaps, который обеспечивает:

· простое встраивание в интерфейс приложения с Java API, доступным на серверной стороне;

· поддержку маркеров, линий, полигонов, окружностей и тепловых карт;

· Создание и редактирование слоев

Рис. 2.6- Диаграммы и карты CubaPlatform

Полнотекстовый поиск

Возможности:

· подключение полнотектового поиска к проекту за минуты;

· поиск как в базе данных, так и в загруженных файлах;

· интеграция с универсальным фильтром для расширения возможностей поиска в рамках отдельного списка сущностей;

· применение настроек контроля доступа к результатам;

Рис. 2.7- Полнотекстовый поискCubaPlatform

2.2 Обоснование выбора средства разработки

2.2.1 PowerShell

WindowsPowerShell - расширяемое средство автоматизации от Microsoft, состоящее из оболочки с интерфейсом командной строки и сопутствующего языка сценариев. Дополнительно PowerShell предоставляет удобный доступ к COM, WMI и ADSI, равно как и позволяет выполнять обычные утилиты командной строки, чтобы создать единое окружение, в котором администраторы смогли бы выполнять различные задачи на локальных и удалённых системах. Эти административные задачи обычно выполняются с помощью командлетов (в оригинале “cmdlets”, произносится как “commandlets”), которые являются специализированными классами .Net. Пользователь может комбинировать их в скриптах (сценариях), используя различные конструкции, утилиты командной строки и обращения к обычным классам .NET (или WMI/COM объектам). Кроме того, можно использовать различные хранилища данных, такие как файловая система или реестр, которые предоставляются PowerShell'у посредства “поставщиков” (в оригинале providers). Windows PowerShell также предоставляет механизм встраивания, благодаря которому исполняемые компоненты PowerShell могут быть встроены в другие приложения. Эти приложения затем могут использовать функциональность PowerShell для реализации различных операций, включая предоставляемые через графический интерфейс. Этот подход применен в Microsoft ExchangeServer 2007 для реализации управляющей функциональности в виде командлетов PowerShell и графических утилит управления в виде оболочек PowerShell, которые вызывают необходимые командлеты. Таким образом, графический интерфейс управления находится поверх промежуточного слоя - PowerShell. Другие приложения Microsoft, включая Microsoft SQL Server 2008, System Center Operations Manager и System Center Data Protection Manager также предоставляют доступ к своим интерфейсам управления через командлеты PowerShell [14]. Немалая часть задач, связанных с обслуживанием локальных вычислительных сетей, представляет собой выполнение рутинных операций, ручная реализация которых может потребовать значительного времени. Вероятно, решения, позволяющие автоматизировать выполнение административных задач, которые могли бы повысить производительность, возникли почти сразу же с появлением профессии системного администратора.Наиболее распространенным средством “экономии времени и избавления от головной боли” стала запись и последовательное пакетное исполнение необходимых операций - исполнение сценариев или скриптов в интерпретаторе команд операционной системы. Попытки улучшить состояние дел в области управления и администрирования Windows с помощью командного интерфейса привели не к адаптации чужеродного для системы языка сценариев или созданию супер-утилиты, работающей в DOS, а к появлению PowerShell - новой командной оболочки.

Команды, исполняемые в Windows PowerShell, могут быть в форме командлетов, которые являются специализированными классами .NET, созданными с целью предоставления функциональности в PowerShell в виде сценариев PowerShell (*.ps1) или являться обычными исполняемыми файлами. Если команда является исполняемым файлом, то PowerShell запускает её в отдельном процессе; если это командлет, то он исполняется внутри процесса PowerShell.

В PowerShell также можно создавать псевдонимы (alias) для командлетов, которые при вызове преобразуются в оригинальные команды. Кроме того, поддерживаются позиционные и именованные параметры для командлетов. При выполнении командлета работа по привязке значений аргументов к параметрам выполняется самим PowerShell, но при вызове внешних исполняемых файлов аргументы передаются им для самостоятельного разбора.

Другое понятие, используемое в PowerShell, - это “конвейер” (pipeline). Подобно конвейерам в Unix, они предназначены для объединения нескольких команд путём передачи выходных данных одной команды во входные данные второй команды, используя оператор. Но в отличие от аналога в Unix, конвейер PowerShell является полностью объектным, то есть данные между командлетами передаются в виде полноценных объектов соответствующих типов, а не как поток байтов. Когда данные передаются как объекты, содержащиеся в них элементы сохраняют свою структуру и типы между командлетами, без необходимости использования какой либо сериализации или посимвольного разбора (parsing) данных, как в случаях когда доступны лишь байтовые потоки. Объект также может содержать некоторые функции, предназначенные для работы с данными. Они также становятся доступными для получающего их командлета. Вывод последнего командлета в конвейере PowerShell автоматически передаёт на командлетWrite-Host, который создаёт текстовое представление объектов и содержащихся в них данных и выводит его на экран. Концепция конвейера изначально используется в Unix/Linux системах (см. Конвейер (UNIX)), PowerShell отличается от них. В Unix/Linux вывод одной команды передаётся на следующий этап конвейера в бинарной форме, т.е. являет собой фактически поток данных.

PowerShell включает язык сценариев с динамическими типами, на котором можно реализовывать сложные операции с использованием командлетов. Язык сценариев поддерживает переменные, функции, конструкции ветвления (if-then-else) циклы (while, do, for и foreach), структурированную обработку ошибок и множество других возможностей, включая интеграцию с .NET [7].Переменные в PowerShell обозначаются префиксом $ перед именем; им может быть присвоено любое значение, включая вывод командлетов.

Исходя из вышенаписанного, делаем вывод, что PowerShellсамый простой и доступный интструмент для создания ПО для сбора информации с Windiwsмашин.

2.2.2 MySQL

Технические возможности СУБД MySQL является системой клиент-сервер, которая содержит многопоточный SQL-сервер, обеспечивающий поддержку различных вычислительных машин баз данных, а также несколько различных клиентских программ и библиотек, средства администрирования и широкий спектр программных интерфейсов (API). Сервер MySQL еще представляется в виде многопоточной библиотеки, которую можно подключить к пользовательскому приложению и получить компактный, более быстрый и легкий в управлении продукт[8].

Для хранения собранной информации БД MySQL является наиболее простой и удобной системой. PowerShellвстроенными функциями имеет возможность рабоятть напрямую с MySQL, передавая всю необходимую информацию, изменять и удалять.

2.2.3 CubaPlatform

Cuba Platformсейчас является сильно развивающейся системой построения бизнес-решений. Ее серверная модель исполнения увеличивает безопасность приложения и позволяет унифицировать код UI между веб и десктоп клиентами. Готовые компоненты платформы, такие как универсальный фильтр данных, отчеты, графики, управление бизнес-процессами, контроль доступа, аудит, полнотекстовый поиск и модуль работы с кредитными картами позволяют быстро решать типовые задачи при разработке корпоративных приложений.

Эти плюсы повышают простоту разработки ПО и снижают временные затраты.

3. Описание создаваемой системы

3.1 Анализ работы скрипта сбора данных

Работу проектируемого скрипта лучше представить в виде блок-схемы, описывающей всю последовательность действий (рис. 3.1).

Рис. 3.1 - Блок схема алгоритма работы скрипта

Блок “Ввод данных для входа в БД” подразумевает определение логина, пароля и имя базы данных для последующей записи и так же ее IPадрес.

“Ввод IP для подсети” определяет набор IP адресов для дальнейшего исследования. В нем может быть задана только последняя его часть, скрипт автоматически рассчитает общее количество IPадресов.

Далее в блоке “Ввод параметров для входа в ПК” определяются логин и пароль для входа в ПК. Для упрощения работы в доменной среде Windowsможно создать пользователя с необходимым набором прав для входа и запуска данного скрипта на всех доменных ПК организации.

После этого происходит разделение Linuxи Windowsмашин. Определение происходит по размеру TTL отклика на команду Ping. Дальнейшая работа проихводится только с Windowsмашин после отсеивания.

Следом за этим идет определение доменных ПК. Недоменные также помечаются и записываются в БД.

После этого производится сбор данных с ПК. В первом скрипте в БД сохраняются только IP адрес, MACадрес, имя ПК. Ниже приведен кусок программного кода определяющий и фиксирующий LinuxПК.

if ($live_host){

if (($live_host.ResponseTimeToLive -ge 30) -and

($live_host.ResponseTimeToLive -le 90))

{

$os_type = "Linux"

$mac_linux = arp -a $pc

$mac_linux = $mac_linux[3] -replace " динамический", ""

$mac_linux = $mac_linux.TrimStart(" ")

$mac_linux = $mac_linux -replace " ", "; "

#$mac_linux = ($mac_linux.SyncRoot)[3].Trim()

$inquiry = "SELECT ip FROM comp WHERE `ip` LIKE '$pc' LIMIT 1"

$sql = Execute_MySQL -query $inquiry -conn $conn

if ($sql){

Write-Host "Linux already exist"

$inquiry = "UPDATE `comp` SET `ip`='$pc', `mac`='$mac_linux', `Name`='-', `user_name`='-', `os_type`='$os_type', `password`='-', `password_md5`='-' WHERE `ip` LIKE '$pc'"

$sql = Execute_MySQL -query $inquiry -conn $conn

}

else {

Write-Host "Linux stored"

$inquiry = "INSERT INTO `comp`(`ip`, `mac`, `Name`, `user_name`, `os_type`, `password`, `password_md5`) VALUES ('$pc','$mac_linux','-','-','$os_type','-','-')"

$sql = Execute_MySQL -query $inquiry -conn $conn

}

}

После всех операций в данном скрипте производится запись в БД.

Рис. 3.2 - Блок схема алгоритма работы скрипта

После этого входит в работу следующий скрип (рис. 3.2), который основывается на собранной информации от первого. Происходит чтение из БД и выполнение операции сбора следующего набора сведений о ПК:

· материнская плата;

· процессор;

· оперативная память;

· жесткий диск;

· сетевые интерфейсы;

· операционная система;

· информация об обновлениях (KB);

· информация о лицензии microsoftoffice.

Ниже приведен отрывок программного кода второго скрипта сбора информации о ПК.

$hw = New-Object PsObject -Property @{

name = $Env:COMPUTERNAME

mb = $mb2 + " " + $mb1

cpu = $cpu.Name + " (core: " + $cpu.NumberOfCores + ", " + $cpu.SocketDesignation + ")"

ram = "{0:N3} Gb" -f ($mem_total)

hdd = $hdd_str

nic = $nic_str

os = $OSName + ": " + $OSKey + " ("+$lic+")"

office = $OfficeName + ": " + $OfficeKey

sw = $sw

sw_kb = $kb

}

3.2Архитектура базы данных

Вся собранная информация хранится в одной БД. Она разделена на таблицы, по каждому из собираемых параметров.

Для работы первого скрипта создана первая таблица (HW). Она хранит данные об IP, MACи имени ПК. Следующая таблица - HW+SW. В ней также хранятся для связки IP, MAC и имена ПК. Это сделано для снижения нагрузки на ЦП сервера и для простоты кода, т.к. каждый скрипт, во время своей работы используется только свою таблицу в БД. Кроме этого в этой таблице содержится информация:

· материнская плата;

· процессор;

· оперативная память;

· жесткий диск;

· версия Windows;

· тип и лицензионный ключ MSOffice;

· сетевая плата;

· список обновлений Windows.

Для того, чтобы видеть динамику изменений в комплектующий ПК создана таблица БД DIFF, которая сохраняет результат работы второго скрипта. Туда записываются изменения, если какой-то параметр ПК был изменен, например, количество оперативной памяти.

Рис. 3.3 - Связь между таблицами БД

Таким образом, используя данную схему хранения в БД, возможно, не только собирать, сохранять сведения о ПК (рис. 3.4), но и фиксировать изменения в комплектующих. Это поможет сохранять перемещения ПК между сотрудниками.

Рис. 3.4 - Внешний вид таблицы БД в PHPMyAdmin

3.3 Формирование e-mail отчетов

Помимо постоянного сбора информации о ПК и ее сохранении, для полноты функционала еще требуется иметь возможность формировать и анализировать отчеты. Например, отчет о текущем состоянии ПК и комплектующих.

Для этого во второй скрипт на PowerShellзаложена функция формирования e-mailписьма (рис. 3.5).

Рис. 3.5 - Внешний вид e-mail отчета

Ниже приведен отрывок программного кода для e-mailотчета.

$dt = Get-Date

<#$header = ''

$header += '<!DOCTYPE html>'

$header += '<html><head>'

$header += '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'

$header += '</head>'

$header += 'header -> C:\Script\GetSoft\soft_ps.ps1<br>'

$header += 'SVN: <br>'

#>

$header += 'Work time:<b> '+$($Watch.Elapsed)+'</b><br>'

$header += '<h2 align="center">Report by ' + $dt.ToString('dd/MM/yyyyHH:mm') + '</h2>'

$mail_body = $header + $mail_err + $mail

$mail_body += '</html>'

<#

# Send email

$SMTPClient = new-object System.Net.Mail.SMTPClient

$Msg = new-object System.Net.Mail.MailMessage

$Msg.From = "From"

$Msg.Subject = '[Inventory] ' + $dt.ToString('dd/MM/yyyyHH:mm')

$Msg.IsBodyHTML = 1

$Msg.BodyEncoding = [System.Text.Encoding]::UTF8

$Msg.Body= $mail_body

$SMTPClient.Host = "Host"

$SMTPClient.Port = 25

$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("From", "PASSWORD")

#$Msg.To.Add('Host)

$Msg.To.Add('Host')

$SMTPClient.Send($Msg)

#>

$tmp = $dir_name + "\test.html"

Set-Content $tmp $mail_body -Encoding UTF8

3.4 Веб интерфейс

Веб интерфейс был разработан на CUBAPlatform с помощью конструктора форм.

Веб интерфейс предназначен для ручной фиксации персональных компьютеров и их характеристик. Кроме автоматизированной части в даннойработе существует инструмент для ручного ввода информации. Сначала ПК заводится системным администратором (рис. 3.6), далее информация о нём актуализируется автоматически.

Рис. 3.6 - Процесс ввода информации о ПК и его комплектующих

Кроме ввода информации о ПК возможен так же ручной ввод по комплектующим (рис. 3.7).

Рис.3.7 - Процесс ввода информации о комплектующих ПК

Заключение

В ходе работы изучены средства и технологии, на которых базируется разработанное ПО.

Так же было произведёно обоснование определенного выбора конкретных технологий. Приведен обзор аналогов систем сбора данных о персональных компьютерах в сети. В результате анализа был выбран PowerShell, как основной язык разработки.

Описана работа всей системы в целом, дающий требуемый результат.

В результате получено ПО, позволяющее рукописный ввод данных, изменение, хранение и ее автоматизированное обновление. Данное ПО в разы сокращает временные затраты на сбор данных о персональных компьютерах, позволяет консолидировать все собранные сведения.

Результат данной бакалаврской работы можно использовать в корпоративной среде для анализа состояния парка персональных компьютеров.

Список использованных источников

1. Консультант Плюс [Электронный ресурс] / 2016. - Режим доступа: http://www.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=107970#0, свободный. - Загл. с экрана

2. Учет компьютеров, оборудования и IT инфраструктуры [Электронный ресурс] / 2016. - Режим доступа: http://it-invent.ru/, свободный. - Загл. с экрана

3. Сетевые программы для системных администраторов [Электронный ресурс] / 2016. - Режим доступа: www.10-strike.com/rus//, свободный. - Загл. с экрана

4. Hardware-inspector [Электронный ресурс] / 2016. - Режим доступа: pro-final.ru/911-hardware-inspector-5-7-11-realizovan-import.html/, свободный. - Загл. с экрана

5. Кох, Ф. Введение в технологии языка сценариев для пользователей без базовых знаний. MICROSOFT SWITZERLAND. 2007. - С. 30

6. Высокоуровневая Java платформа с открытым кодом для создания корпоративных информационных систем [Электронный ресурс] / 2016. - Режим доступа: cuba-platform.ru, свободный. - Загл. с экрана

7. Джеймс, Х. Знакомство со стандартом PLC: IEC 1131-3 (МЭК1131-3) [Текст]/ Мир компьютерной автоматизации, 2008. - 89 С.5

8. Коробко, И.В. PowerShell как средство автоматического администрирования [Текст] / И. В. Коробко - Мир компьютерной автоматизации, 2008. - С. 89

9. Зюбин В.Е. К пятилетию стандарта IEC 1131-3. Итоги и прогнозы. Системы управления [Текст] / В.Е. Зюбин - М: СПб, 2010. - С. 2

10. Орлов, С.А. Технологии разработки программного обеспечения : учеб. / С.А. Орлов. [Текст] - СПб.: Питер, 2002. - С. 464

11. Олифер, В. Компьютерные сети. Принципы, технологии, протоколы. [Текст] / В. Олифер, Н. Олифер. - Питер, 2012. - С. 154

12. Станек, У. Р. Windows PowerShell 2.0. Справочник администратора [Текст] / У.Р. Станек - Питер, 2016. - С. 54

13. Станек У. Р. Microsoft Windows Command-Line: Administrator's Pocket Consultant [Текст] / У. Р. Станек - MICROSOFT SWITZERLAND 2015. - С.15

14. Попов, А. Введение в Windows PowerShell [Текст] / А. Попов - М: Наука и техника, 2015. - С.15

Приложение А

Исходный код скрипта автоматической инвентаризации

cls

FunctionOpen_MySQL{

param(

[String]$database = 'database',

[String]$hostmysql = 'hostmysql',

[String]$login = 'login',

[String]$password = 'password'

)

[void][system.reflection.Assembly]::LoadWithPartialName("MySql.Data")

$connStr = "server=$hostmysql;port=3306;uid=$login;pwd=$password;database=$database;Pooling=False"

$conn = New-Object MySql.Data.MySqlClient.MySqlConnection($connStr)

$conn.Open()

$conn

}

Function Execute_MySQL{

param(

[String]$query,

[MySql.Data.MySqlClient.MySqlConnection]$conn

)

$cmd = New-Object MySql.Data.MySqlClient.MySqlCommand($query, $conn)

$da = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($cmd)

$ds = New-Object System.Data.DataSet

$da.Fill($ds) | Out-Null

$ds.Tables[0]

}

Function Close_MySQL{

param(

[MySql.Data.MySqlClient.MySqlConnection]$conn

)

$conn.close()

}

$address =1..255

$out = ""

$username = 'username'

$password = 'password'

$password_sec = 'password_sec'

$md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider

$utf8 = new-object -TypeName System.Text.UTF8Encoding

$hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($password)))

$hash_md5 = $hash.ToLower() -replace '-', ''

$conn = Open_MySQL

foreach ($address1 in $address){

$pc = "192.168.47." + $address1

$live_host = test-connection $pc -Count 1 -ErrorActionSilentlyContinue

$os_type = "Server is down"

$time = Get-Date -Format T

$date = Get-Date -Format dd.MM.yyyy

if ($live_host){

if (($live_host.ResponseTimeToLive -ge 30) -and

($live_host.ResponseTimeToLive -le 90))

{

$os_type = "Linux"

$mac_linux = arp -a $pc

$mac_linux = $mac_linux[3] -replace " динамический", ""

$mac_linux = $mac_linux.TrimStart(" ")

$mac_linux = $mac_linux -replace " ", "; "

#$mac_linux = ($mac_linux.SyncRoot)[3].Trim()

$inquiry = "SELECT ip FROM comp WHERE `ip` LIKE '$pc' LIMIT 1"

$sql = Execute_MySQL -query $inquiry -conn $conn

if ($sql){

Write-Host "Linux already exist"

$inquiry = "UPDATE `comp` SET `ip`='$pc', `mac`='$mac_linux', `Name`='-', `user_name`='-', `os_type`='$os_type', `password`='-', `password_md5`='-' WHERE `ip` LIKE '$pc'"

$sql = Execute_MySQL -query $inquiry -conn $conn

}

else {

Write-Host "Linux stored"

$inquiry = "INSERT INTO `comp`(`ip`, `mac`, `Name`, `user_name`, `os_type`, `password`, `password_md5`) VALUES ('$pc','$mac_linux','-','-','$os_type','-','-')"

$sql = Execute_MySQL -query $inquiry -conn $conn

}

}

elseif (($live_host.ResponseTimeToLive -ge 91) -and

($live_host.ResponseTimeToLive -le 150))

{

$os_type = "Windows"

$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $username,(ConvertTo-SecureString -String $password -AsPlainText -Force)

$session = New-PSSession -ComputerName $pc -Credential $cred

if ($session){

$out = Invoke-Command -Session $session {

$nic = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .

$nic_str = ""

$hw = @()

foreach ($nic1 in $nic){

$hw += New-Object PsObject -Property @{

ip = $nic1.IPAddress[0]

mac = $nic1.MACAddress

name = $Env:COMPUTERNAME

}

}

return $hw

}

Remove-PSSession -Session $session

foreach ($out1 in $out){

if ($out1.ip -eq $pc){

Write-Host $out1.name.ToLower() " -> " $out1.ip " -> " $out1.mac

$my_ip = $out1.ip

$my_mac = $out1.mac.ToLower()

$my_name = $out1.name.ToLower()

$inquiry = "SELECT mac FROM comp WHERE `mac` LIKE '$my_mac' LIMIT 1"

$sql = Execute_MySQL -query $inquiry -conn $conn

if ($sql){

Write-Host "PC already exist"

$inquiry = "UPDATE `comp` SET `ip`='$my_ip', `Name`='$my_name', `user_name`='$username', `os_type`='$os_type', `password`='$password_sec', `password_md5`='$hash_md5', `date`='$date', `Time`='$time' WHERE `mac` LIKE '$my_mac'"

$sql = Execute_MySQL -query $inquiry -conn $conn

}else {

$inquiry = "INSERT INTO `comp`(`ip`, `mac`, `Name`, `user_name`, `os_type`, `password`, `password_md5`) VALUES ('$my_ip','$my_mac','$my_name','$username', '$os_type', '$password_sec','$hash_md5')"

$sql = Execute_MySQL -query $inquiry -conn $conn

Write-Host "PC stored"

}

}

}

}

else{

Write-Host "no domain"

$os_type = "no domain"

$inquiry = "SELECT ip FROM comp WHERE `ip` LIKE '$pc' LIMIT 1"

$sql = Execute_MySQL -query $inquiry -conn $conn

if ($sql){

Write-Host "no domain exist"

$inquiry = "UPDATE `comp` SET `ip`='$pc', `mac`='-', `Name`='-', `user_name`='-', `os_type`='$os_type', `password`='-', `password_md5`='-' WHERE `ip` LIKE '$pc'"

$sql = Execute_MySQL -query $inquiry -conn $conn

}

else {

Write-Host "no domain stored"

$inquiry = "INSERT INTO `comp`(`ip`, `mac`, `Name`, `user_name`, `os_type`, `password`, `password_md5`) VALUES ('$pc','-','-','-','$os_type','-','-')"

$sql = Execute_MySQL -query $inquiry -conn $conn

}

}

}

}

}

Close_MySQL -conn $conn

cls

Function Open_MySQL{

param(

[String]$database = 'database',

[String]$hostmysql = 'hostmysql',

[String]$login = 'login',

[String]$password = 'password'

)

#загружаемкомпонентыmysql

[void][system.reflection.Assembly]::LoadWithPartialName("MySql.Data")

#открываемподключение

$connStr = "server=$hostmysql;port=3306;uid=$login;pwd=$password;database=$database;Pooling=False"

$conn = New-Object MySql.Data.MySqlClient.MySqlConnection($connStr)

$conn.Open()

$conn

}

Function Execute_MySQL{

param(

[String]$query,

[MySql.Data.MySqlClient.MySqlConnection]$conn

)

#создаемобъектыдлявыполнениязапроса

$cmd = New-Object MySql.Data.MySqlClient.MySqlCommand($query, $conn)

$da = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($cmd)

$ds = New-Object System.Data.DataSet

#получение запроса

$da.Fill($ds) | Out-Null

#ну и вывод на экран

$ds.Tables[0]

}

Function Close_MySQL{

param(

[MySql.Data.MySqlClient.MySqlConnection]$conn

)

#закрываем подключени

$conn.close()

}

$cmd = {

function Search-RegistryKeyValues {

param(

[string]$path,

[string]$valueName

)

Get-ChildItem $path -recurse -eaSilentlyContinue |

% {

if ((Get-ItemProperty -Path $_.PsPath -eaSilentlyContinue) -match $valueName){

$_.PsPath

}

}

}

function Get-key{

param(

$value

)

$ProductKey = ""

$map="BCDFGHJKMPQRTVWXY2346789"

for ($i = 24; $i -ge 0; $i--){

$r = 0

for ($j = 14; $j -ge 0; $j--) {

$r = ($r * 256) -bxor $value[$j]

$value[$j] = [math]::Floor([double]($r/24))

$r = $r % 24

}

$ProductKey = $map[$r] + $ProductKey

if (($i % 5) -eq 0 -and $i -ne 0){

$ProductKey = "-" + $ProductKey

}

}

$ProductKey

}

$nic = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .

$nic_str = ""

foreach ($nic1 in $nic){

$nic_str += $nic1.IPAddress[0] + " " + $nic1.MACAddress + "; "

}

$mem_total = ((Get-WmiObject -Class Win32_ComputerSystem).TotalPhysicalMemory / 1Gb)

$mb1 = wmic baseboard get product

$mb1 = $mb1[2] -replace " ", ""

$mb2 = wmic baseboard get manufacturer

$mb2 = $mb2[2] -replace " ", ""

$cpu = Get-WmiObject Win32_Processor | Select-Object Name,NumberOfCores,SocketDesignation

$soft = Get-WmiObject -Class Win32_Product | Select-Object Caption #| Out-String

$sw = ""

foreach ($soft1 in $soft){

$sw += $soft1.Caption + "; "

}

$sw_kb = Get-HotFix | Select-Object HotFixID

#$sw_kb = $sw_kb -replace " ","; "

$soft = @();

for ($i=0; $i -lt $sw_kb.Length; $i++)

{

$soft += 0

} ;

$kb = @();

for ($i=0; $i -lt $sw_kb.Length; $i++)

{

$kb += 0

} ;

for ($i = 0; $i -lt $sw_kb.Length; $i++)

{

$soft[$i] = $sw_kb.SyncRoot[$i]

$kb[$i] = $soft[$i].HotFixID

}

$hdd = @()

Get-WmiObject -Class Win32_DiskDrive | foreach {

$sn = $_.SerialNumber -replace "20","";

$sn = $sn -replace " ","";

$hdd += New-Object PsObject -Property @{

Model = $_.Model;

Deviceid = $_.Deviceid;

#SerialNumber = $_.SerialNumber -replace "20","";

SerialNumber = $sn;

Size = "{0:0} Gb" -f($_.Size / 1Gb);

FirmwareRevision = $_.FirmwareRevision;

MediaType = $_.MediaType;

SCSIPort = $_.SCSIPort

}

}

Get-WmiObject -Class Win32_PhysicalMedia | foreach {

foreach ($hdd1 in $hdd){

if ($hdd1.Deviceid -eq $_.Tag){

$sn = $_.SerialNumber -replace " ",""

$sn = $sn -replace "20",""

$hdd1.SerialNumber += " (" + $sn + ")"

}

}

}

$hdd_str = ""

foreach ($hdd1 in $hdd){

$hdd_str += $hdd1.Model + "(" + $hdd1.Size + ") SN:" + $hdd1.SerialNumber + "; "

}

# Windows

$OSName = (get-itemproperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName

$OSKey = Get-key (get-itemproperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").digitalproductid[0x34..0x42]

$lic = wmic path SoftwareLicensingProduct get licensestatus | Select-String "1"

if ($lic){

$lic = "License Status: OK"

}else{

$lic = "License Status: Error"

}

# Office

# find registry key that has value "digitalproductid"

# 32-bit versions

$key = Search-RegistryKeyValues "hklm:\software\microsoft\office" "digitalproductid"

if ($key -eq $null) {

# 64-bit versions

$key = Search-RegistryKeyValues "hklm:\software\Wow6432Node\microsoft\office" "digitalproductid"

if ($key -eq $null) {

$OfficeKey = "no"

$OfficeName = "MS Office is not installed."

}else{

$OfficeKey = Get-key (Get-ItemProperty $key).digitalproductid[52..66]

$OfficeName = (Get-ItemProperty $key).ConvertToEdition

}

}

$hw = New-Object PsObject -Property @{

name = $Env:COMPUTERNAME

mb = $mb2 + " " + $mb1

cpu = $cpu.Name + " (core: " + $cpu.NumberOfCores + ", " + $cpu.SocketDesignation + ")"

ram = "{0:N3} Gb" -f ($mem_total)

hdd = $hdd_str

nic = $nic_str

os = $OSName + ": " + $OSKey + " ("+$lic+")"

office = $OfficeName + ": " + $OfficeKey

sw = $sw

sw_kb = $kb

}

return $hw #| flname,os,office,mb,cpu,ram,hdd,nic

}

$inquiry = "SELECT ip,user_name,password,password_md5 FROM comp"

$sql_answer = Execute_MySQL -query $inquiry -conn $conn

Close_MySQL -conn $conn

$arr = @()

$live_IP = @()

foreach ($sql_answer1 in $sql_answer){

$xep = 0

foreach ($arr1 in $arr){

if (($sql_answer1.user_name -eq $arr1.user) -and ($sql_answer1.password_md5 -eq $arr1.pass_md5)){

$arr1.ip += $sql_answer1.ip

$xep = 1

break

}

}

if ($xep -eq 0){

$arr += New-Object PsObject -Property @{

ip = @($sql_answer1.ip);

user = $sql_answer1.user_name;

pass = $sql_answer1.password;

pass_md5 = $sql_answer1.password_md5;

}

}

}

$live_IP = $arr1.ip

foreach ($arr1 in $arr){

Write-Host "---"

if ($arr1.user -eq "user"){

$pass = $arr1.pass | ConvertTo-SecureString

$cred = New-Object System.Management.Automation.PSCredential $arr1.user,$pass

$session = New-PSSession -ComputerName $arr1.ip -Credential $cred

$result = Invoke-Command -Session $session -ScriptBlock $cmd -ErrorVariable err

Remove-PSSession -Session $session

}

}

Приложение Б

Презентационный материал

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.