WinITPro.ru > PowerShell > Выполнение MySQL запросов из PowerShell
19.04.2016 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.dllAdd-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, EmailAddressForEach($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 RemoteSignedAdd-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:
Еще записи по теме: PowerShell