Búsqueda de sitios web

Ejecutar consultas MySQL desde PowerShell


Una de las características útiles de PowerShell es la oportunidad de conectarse a bases de datos en servidores remotos, incluidos los de MySQL. Por lo tanto, puede abordar las tablas de MySQL para acceder a los datos directamente desde la consola de PowerShell. En este artículo, trataremos los ejemplos de conexión a la base de datos MySQL desde el script de PowerShell y algunos comandos para leer/escribir los datos en las tablas de la base de datos. Para conectarse a un servidor MySQL, necesitamos un conector especial: MySQL .NET Connector, que se puede descargar desde el sitio web oficial de MySQL.

En el momento de escribir este artículo, la última versión disponible del conector era Connector/Net 6.9.9.

Nota. No es necesario instalar la versión completa de MySQL .NET Connector, basta con copiar MySql.Data.dll a su computadora.

Descargue mysql-connector-net-6.9.9.msi e instale MySQL .NET Connector en la configuración mínima.

De antemano, cree una base de datos para trabajar en su servidor MySQL. Todas las operaciones en el servidor de la base de datos se realizan desde el símbolo del sistema CLI de MySQL, pero puede usar una herramienta gráfica phpmyadmin o cualquier otra utilidad adecuada.

Crear base de datos de usuarios:

mysql> CREATE DATABASE aduser;

En su servidor MySQL, cree un usuario separado con el privilegio de conectarse a la base de datos aduser de forma remota. Otorgue a este usuario el privilegio de conectarse a la base de datos de forma remota desde la dirección IP 10.1.1.195:

mysql>GRANT ALL PRIVILEGES ON aduser.* TO posh@'10.1.1.195' 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;

Seleccione la base de datos creada:

mysql> USE aduser;

Y cree la tabla más simple que consta de 3 columnas: ID, nombre de usuario de AD y dirección de correo electrónico.

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

Regrese al servidor, desde el cual nos conectaremos a la base de datos MySQL. Supongamos que queremos que todos los nombres y direcciones de correo electrónico de los usuarios de AD se muestren en la tabla. Puede obtener esta información mediante el cmdlet Get-ADUser.

El siguiente script de PowerShell permite conectarse a la base de datos y escribir la lista de usuarios y sus correos electrónicos obtenidos de AD.

Set-ExecutionPolicy RemoteSigned
#connect the library MySql.Data.dll
Add-Type -Path ‘C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.9\Assemblies\v4.5\MySql.Data.dll'
# database connection string, server — server name, uid - mysql user name, pwd- password, database — name of the database on the server
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@{ConnectionString='server=10.1.1.13;uid=posh;pwd=P@ssw0rd;database=aduser'}
$Connection.Open()
$sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$sql.Connection = $Connection
#prepare a list of users from specific OU containing names and e-mail addresses
Import-Module activedirectory
$UserList=Get-ADUser -SearchBase ‘OU=Users,OU=Paris,DC=adatum,DC=com’ -filter * -properties name, EmailAddress
ForEach($user in $UserList)
{
$uname=$user.Name;
$uemail=$user.EmailAddress;
#write the information about each use to the database table
$sql.CommandText = "INSERT INTO users (Name,Email) VALUES ('$uname','$uemail')"
$sql.ExecuteNonQuery()
}
$Reader.Close()
$Connection.Close()

El siguiente script se usa para leer los datos ingresados previamente en la base de datos y mostrarlos en la consola de PowerShell. Hemos mostrado los campos que contienen los nombres y direcciones de correo electrónico de los usuarios:

Set-ExecutionPolicy RemoteSigned
Add-Type -Path ‘C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.9\Assemblies\v4.5\MySql.Data.dll'
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@{ConnectionString='server=10.1.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()

En los próximos artículos, consideraremos el caso del uso de la base de datos MySQL para recopilar y almacenar información de los registros de eventos de Windows (seguimiento de la eliminación de archivos mediante la política de auditoría y la base de datos MSSQL).

Artículos relacionados