Виконання MySQL запитів з PowerShell

Однією з цікавих функцій PowerShell є можливість підключення до баз даних на віддалених серверах, в тому числі MySQL. Таким чином, прямо з консолі PowerShell можна звертатися до таблиць MySQL для доступу до даних. У цій статті ми розглянемо приклади підключення до MySQL з Powershell скрипта і команди для читання і запису даних в таблицях БД. Щоб з'єднатися з сервером MySQLнам знадобиться спеціальний коннектор MySQL .NET Connector, який можна завантажити безпосередньо на офіційному сайті MySQL.

На момент написання статті остання версія коннектора - Connector / Net 6.9.8

Примітка. Зовсім не обов'язково ставити повну версію MySQL .NET Connector, досить буде скопіювати на систему файл бібліотеки MySql.Data.dll.

Скачайте файл mysql-connector-net-6.9.8.msi і встановіть MySQL .NET Connector в мінімальній конфігурації.

На сервері MySQL попередньо створимо базу даних, з якої будемо працювати. Всі операції на сервері СУБД ми виконуємо з командою рядка MySQL CLI (розглядали раніше), але можна скористатися графічної phpmyadmin або будь-який інший утилітою.

Створимо базу даних aduser:

mysql> CREATE DATABASE aduser;

На сервері MySQL створимо окремого користувача з правом віддаленого підключення до БД aduser. Надамо даному користувачеві право віддаленого підключення до БД з IP адреси 10.10.1.95

mysql> GRANT ALL PRIVILEGES ON aduser. * TO posh@'10.10.1.95 'IDENTIFIED BY' P @ ssw0rd 'WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

Виберемо створену базу:

mysql> USE aduser;

І створимо просту таблицю з 3 полів: ідентифікатор, ім'я користувача в AD і його email-адреса.

mysql> CREATE TABLE users (id INT NOT NULL AUTO_INCREMENT, name VARCHAR (100), email VARCHAR (100), PRIMARY KEY (ID));

Повернемося на сервер, з якого будемо підключатися до MySQL базі. Припустимо, ми хочемо, щоб в таблиці містилися всі імена і email адреси користувачів AD. Цю інформацію можна отримати за допомогою командлета Get-ADUser.

Наступний Powershell скрипт здійснює підключення до БД, і записує в неї список користувачів і email, отриманий з AD.

Set-ExecutionPolicy RemoteSigned
# Підключаємо бібліотеку MySql.Data.dll
Add-Type -Path 'C: \ Program Files (x86) \ MySQL \ MySQL Connector Net 6.9.8 \ Assemblies \ v4.5 \ MySql.Data.dll'
# Рядок підключення до БД, server - ім'я севрера, uid - ім'я mysql користувача, pwd- пароль, database - ім'я БД на сервері
$ Connection = [MySql.Data.MySqlClient.MySqlConnection] @ ConnectionString = 'server = 10.10.1.13; uid = posh; pwd = P @ ssw0rd; database = aduser'
$ Connection.Open ()
$ Sql ​​= New-Object MySql.Data.MySqlClient.MySqlCommand
$ Sql.Connection = $ Connection
# Формуємо список користувачів з іменами і email адресами
Import-Module activedirectory
$ UserList = Get-ADUser -SearchBase 'OU = Users, OU = London, DC = contoso, DC = ru' -filter * -properties name, EmailAddress
ForEach ($ user in $ UserList)

$ Uname = $ user.Name;
$ Uemail = $ user.EmailAddress;
# Записуємо інформацію про кожного користувача в табдіцу БД
$ Sql.CommandText = "INSERT INTO users (Name, Email) VALUES ( '$ uname', '$ uemail')"
$ Sql.ExecuteNonQuery ()

$ Reader.Close ()
$ Connection.Close ()

Наступний скрипт використовується для читання раніше записаних в таблицю БД даних і відображення їх в консолі PowerShell. Ми вивели з бази значення полів з іменами користувачів і їх поштовими адресами:

Set-ExecutionPolicy RemoteSigned
Add-Type -Path 'C: \ Program Files (x86) \ MySQL \ MySQL Connector Net 6.9.8 \ Assemblies \ v4.5 \ MySql.Data.dll'
$ Connection = [MySql.Data.MySqlClient.MySqlConnection] @ ConnectionString = 'server = 10.10.1.13; uid = posh; pwd = P @ ssw0rd; database = aduser'
$ Connection.Open ()
$ MYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlCommand
$ MYSQLDataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter
$ MYSQLDataSet = New-Object System.Data.DataSet
$ MYSQLCommand.Connection = $ Connection
$ MYSQLCommand.CommandText = 'SELECT * from users'
$ MYSQLDataAdapter.SelectCommand = $ MYSQLCommand
$ NumberOfDataSets = $ MYSQLDataAdapter.Fill ($ MYSQLDataSet, "data")
foreach ($ DataSet in $ MYSQLDataSet.tables [0])

write-host "User:" $ DataSet.name "Email:" $ DataSet.email

$ Connection.Close ()

У наступних статтях ми розглянемо приклад використання MySQL бази для збору та зберігання інформації з журналів подій Windows:

  • Відстеження і запис в БД інформації про віддалених файлах в загальних мережевих каталогах