Wykonywanie zapytań MySQL z PowerShell

Jedną z ciekawych funkcji PowerShell jest możliwość łączenia się z bazami danych na zdalnych serwerach, w tym MySQL. Zatem bezpośrednio z konsoli PowerShell można uzyskać dostęp do tabel MySQL w celu uzyskania dostępu do danych. W tym artykule przyjrzymy się przykładom łączenia się z MySQL ze skryptu Powershell oraz poleceniom do odczytu i zapisu danych w tabelach bazy danych. Aby połączyć się z serwerem MySQL, potrzebujemy specjalnego łącznika MySQL .NET, który można pobrać bezpośrednio z oficjalnej strony MySQL..

W chwili pisania tego tekstu najnowszą wersją złącza jest Złącze / Sieć 6.9.8

Uwaga. Nie jest konieczne instalowanie pełnej wersji MySQL .NET Connector, wystarczy skopiować plik biblioteki MySql.Data.dll do systemu.

Pobierz plik mysql-connector-net-6.9.8.msi i zainstaluj złącze MySQL .NET w minimalnej konfiguracji.

Na serwerze MySQL najpierw utwórz bazę danych, z którą będziemy pracować. Wszystkie operacje na serwerze DBMS wykonujemy z polecenia wiersza CLI MySQL (omówionego wcześniej), ale możesz użyć grafiki phpmyadmin lub dowolnego innego narzędzia.

Utwórz bazę danych aduser:

mysql> CREATE DATABASE aduser;

Na serwerze MySQL utwórz osobnego użytkownika z prawem do zdalnego połączenia z bazą danych aduser. Damy temu użytkownikowi prawo do zdalnego połączenia z bazą danych z adresu IP 10.10.1.95

mysql> PRZYZNACZ WSZYSTKIE UPRAWNIENIA NA ADUZU. * DO posh@'10.10.1.95 'ZIDENTYFIKOWANY PRZEZ' P @ ssw0rd 'Z OPCJĄ DOTACJI MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

Wybierz utworzoną bazę danych:

mysql> USE aduser;

I utwórz prostą tabelę z 3 polami: identyfikator, nazwa użytkownika w AD i jego adres e-mail.

mysql> UTWÓRZ użytkowników w TABELI (identyfikator INT NOT NULL AUTO_INCREMENT, nazwa VARCHAR (100), e-mail VARCHAR (100), PRIMARY KEY (ID));

Wrócimy do serwera, z którego połączymy się z bazą danych MySQL. Załóżmy, że chcemy, aby tabela zawierała wszystkie nazwiska i adresy e-mail użytkowników AD. Informacje te można uzyskać za pomocą polecenia cmdlet Get-ADUser..

Poniższy skrypt Powershell łączy się z bazą danych i zapisuje w niej listę użytkowników i wiadomości e-mail otrzymanych z AD.

Set-ExecutionPolicy RemoteSigned
# łączymy bibliotekę MySql.Data.dll
Add-Type -Path 'C: \ Program Files (x86) \ MySQL \ MySQL Connector Net 6.9.8 \ Assemblies \ v4.5 \ MySql.Data.dll'
# Ciąg połączenia DB, serwer to nazwa serwera, uid to nazwa użytkownika mysql, pwd to hasło, baza danych to nazwa bazy danych na serwerze
$ Connection = [MySql.Data.MySqlClient.MySqlConnection] @ ConnectionString = 'server = 10.10.1.13; uid = posh; pwd = P @ ssw0rd; database = aduser'
$ Connection.Open ()
$ sql = Nowy obiekt MySql.Data.MySqlClient.MySqlCommand
$ sql.Connection = $ Connection
# utwórz listę użytkowników z nazwiskami i adresami e-mail
Aktywowany katalog Import-Module
$ UserList = Get-ADUser -SearchBase 'OU = Users, OU = London, DC = contoso, DC = en' -filter * -properties name, EmailAddress
ForEach ($ user w $ UserList)

$ uname = $ user.Name;
$ uemail = $ user.EmailAddress;
# napisz informacje o każdym użytkowniku w tabeli bazy danych
$ sql.CommandText = "WSTAWIĆ DO UŻYTKOWNIKÓW (nazwa, adres e-mail) WARTOŚCI („ $ uname ”,„ $ uemail ”)”
$ sql.ExecuteNonQuery ()

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

Poniższy skrypt służy do odczytu danych zapisanych wcześniej w tabeli bazy danych i wyświetlania ich w konsoli PowerShell. Z bazy danych wydedukowaliśmy wartości pól z nazwami użytkowników i ich adresami e-mail:

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 = Nowy obiekt MySql.Data.MySqlClient.MySqlCommand
$ MYSQLDataAdapter = Nowy obiekt MySql.Data.MySqlClient.MySqlDataAdapter
$ MYSQLDataSet = Nowy obiekt System.Data.DataSet
$ MYSQLCommand.Connection = $ Connection
$ MYSQLCommand.CommandText = 'WYBIERZ * od użytkowników'
$ MYSQLDataAdapter.SelectCommand = $ MYSQLCommand
$ NumberOfDataSets = $ MYSQLDataAdapter.Fill ($ MYSQLDataSet, „dane”)
foreach ($ DataSet w $ MYSQLDataSet.tables [0])

write-host „Użytkownik:” $ DataSet.name ”E-mail:„ $ DataSet.email

$ Connection.Close ()

W poniższych artykułach rozważymy przykład użycia bazy danych MySQL do zbierania i przechowywania informacji z dzienników zdarzeń Windows:

  • Śledzenie i zapisywanie w bazie danych informacji o usuniętych plikach we współdzielonych katalogach sieciowych