Разработка автоматической системы инвентаризации 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
...Подобные документы
Организационная и функциональная структура налоговой инспекции. Разработка ИС автоматизации процесса инвентаризации технических средств. Анализ инструментальных средств разработки информационных систем. Организация внутримашинной информационной базы.
курсовая работа [116,8 K], добавлен 29.09.2012Выбор системы программирования. Разработка программного обеспечения для ведения складского учета (инвентаризации) персональных компьютеров и комплектующих на предприятии. Обоснование даталогической модели данных. Рекомендации по применению программы.
курсовая работа [1,9 M], добавлен 14.01.2013Изучение процесса автоматизации системы управления складом и отчетами. Проектирование схемы отпуска товара со склада с помощью методологий структурного анализа. Выбор инструментальных средств. Разработка алгоритмов, базы данных и руководства пользователя.
дипломная работа [1,8 M], добавлен 09.11.2016Системы управления базами данных и их использование для решения задач автоматизации предприятия. Разработка информационного и программного обеспечения для автоматизации хранения и обработки информации при организации работы агропромышленного предприятия.
курсовая работа [607,1 K], добавлен 07.05.2011Порядок автоматизации расчетов себестоимости и длительности программного обеспечения производственного предприятия. Выбор языка программирования и системы управления базами данных. Разработка алгоритмов расчета себестоимости программного обеспечения.
дипломная работа [1,7 M], добавлен 13.06.2017Цель, критерии и ограничения создания автоматизированной системы. Разработка элементов информационного обеспечения информационной системы общежития. Рекомендации по выбору комплекса технических средств для автоматизации задачи учета реализации товара.
курсовая работа [920,8 K], добавлен 11.11.2022Анализ и разработка информационной системы, структура сети предприятия. Описание процесса разработки конфигураций и выявление потребностей в автоматизации функций. Средства разработки проектирования и архитектура базы данных. Разработка модели угроз.
дипломная работа [1,4 M], добавлен 13.07.2011Анализ существующих систем автоматизации документооборота. Выбор шаблона проектирования. Microsoft SQL Server как комплексная высокопроизводительная платформа баз данных. Язык программирования C#. Разработка интерфейса и иллюстрация работы системы.
дипломная работа [2,5 M], добавлен 19.07.2014Разработка автоматизированной информационной системы учета заказов на выполнение работ и формированию отчетной документации Бюро технической инвентаризации (БТИ). Системный анализ и схема документооборота. Разработка инфологической модели данных.
дипломная работа [603,9 K], добавлен 29.08.2014Создание информационной системы автоматизации процесса управления базами данных компании ООО "Роснефть". Требования к характеристикам технических средств. Обоснование выбора CASE-средства. Разработка программного обеспечения, расчет затрат цены и прибыли.
дипломная работа [3,9 M], добавлен 24.03.2012Анализ входной и выходной информации на предприятии. Осуществление функционального и информационного моделирования базы данных, создание ее структуры. Программная реализация системы автоматизации учета работы автотранспорта. Оценка трудоемкости проекта.
дипломная работа [1,2 M], добавлен 09.07.2012Создание учебной информационной системы, реализующей бизнес-процессы предметной области: оборот денежных средств на предприятии по торговле металлопрокатом, участвующих в предоплатах и оплатах приложений к счетам. Разработка программного обеспечения.
курсовая работа [25,7 K], добавлен 27.06.2012Знакомство с этапами разработки автоматической информационной системы для учета продаж бытовой техники для автоматизации документооборота. Рассмотрение особенностей выявления бизнес-процесса продаж бытовой техники, анализ этапов составления инструкции.
дипломная работа [1,4 M], добавлен 28.11.2014Описание складского учета ООО "Курочка рядом". Проведение инвентаризации на предприятии и возможности его автоматизации. Разработка программного обеспечения подсистемы складского учета. Описание задач разработанной подсистемы и средств ее взаимодействия.
дипломная работа [3,8 M], добавлен 12.04.2012Программное обеспечение — неотъемлемая часть компьютерной системы, логическое продолжение технических средств. Типология прикладного программного обеспечения. Интегрированные пакеты программ. Общая характеристика системы автоматизации проектных работ.
курсовая работа [39,2 K], добавлен 16.01.2011Постановка задачи компьютерного моделирования. Разработка автоматизации процессов документооборота, складского учета и инвентаризации, обмена данными между главным офисом компании и его складом. Тестирование аппаратного и программного обеспечения.
дипломная работа [1,7 M], добавлен 13.05.2013Разработка системы автоматизированного учета АН "Елена". Описание информационного и технического обеспечения предприятия, используемых функциональных возможностей. Выбор комплекса задач автоматизации и характеристика существующих бизнес-процессов.
дипломная работа [3,4 M], добавлен 25.01.2010Автоматизация учета и инвентаризации компьютерной техники. Разработка информационного обеспечения. Проектирование базы данных методом "сущность-связь". DFD диаграммы, созданные с помощью САSЕ-средства ВРWin. Регистрация нового компьютера в локальной сети.
дипломная работа [4,3 M], добавлен 23.01.2011Методика автоматизации учета товаров и денежных средств, получаемых от реализации товаров и услуг предприятием "Computer Master". Разработка концепции информационной системы, обоснование выбранного варианта. Выбор и подготовка программного обеспечения.
курсовая работа [656,1 K], добавлен 22.04.2010Расчет издержек предприятия на разработку программного продукта и экономической эффективности от его внедрения. Топология физических связей и структуризация сети. Характеристика программного обеспечения. Средства автоматизации, описание алгоритма задачи.
дипломная работа [867,6 K], добавлен 05.11.2015