从PowerShell运行MySQL查询

时间:2020-01-09 10:46:52  来源:igfitidea点击:

PowerShell的一项有用功能是可以连接到远程服务器(包括MySQL服务器)上的数据库。因此,我们可以寻址MySQL表以直接从PowerShell控制台访问数据。在本文中,我们将处理从PowerShell脚本连接到MySQL DB的示例,以及一些用于读取/写入数据库表中数据的命令。要连接到MySQL服务器,我们需要一个特殊的连接器MySQL .NET连接器,可以从MySQL的官方网站下载该连接器。

在撰写本文时,最新的可用连接器版本为Connector/Net 6.9.9.

注意不需要安装完整版本的MySQL .NET Connector,将MySql.Data.dll复制到计算机就足够了。

下载mysql-connector-net-6.9.9.msi并以最小配置安装MySQL .NET Connector。

选择创建的数据库:

mysql> USE aduser;

并创建由3列组成的最简单的表:ID,AD用户名和电子邮件地址。

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

返回到服务器,我们将从该服务器连接到MySQL数据库。假设我们希望在表中显示AD用户的所有名称和电子邮件地址。我们可以使用Get-ADUser cmdlet获取此信息。

以下PowerShell脚本允许连接到数据库并编写从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=IGI,DC=igift,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()