Some Powershell functions for Preparing Mysql Statements and executing them.
Requires the MySQL .NET Connector
$Dbserv = "server" $Dbname = "db" $Dbuser = "user" $Dbpass = "pass" #MySQL Database connection [System.Reflection.Assembly]::LoadWithPartialName("MySql.Data") | Out-Null $SQLConnection = New-Object MySql.Data.MySqlClient.MySqlConnection $SQLConnection.ConnectionString = "server=$Dbserv;port=3306;uid=$Dbuser;pwd=$Dbpass;database=$Dbname;Integrated Security=False" function MySQLprepare { [OutputType([MySql.Data.MySqlClient.MySqlCommand])] param ( # Query [Parameter( Mandatory = $true )] [String] $query, # Connection [Parameter( Mandatory = $true, ValueFromPipeline = $true )] [MySql.Data.MySqlClient.MySqlConnection] $connection ) $command = New-Object MySql.Data.MySqlClient.MySqlCommand $command.Connection = $connection $command.CommandText = $query (Select-String "@\w+" -input $query -AllMatches).Matches.Value | ForEach-Object { if ($_) { $command.Parameters.AddWithValue($_, "") } } | Out-Null $command.Prepare() return , $command } function MySQLexec { [OutputType([Int])] param ( # QueryParams [Parameter( Mandatory = $false )] [hashtable] $queryParams = @{}, # Command [Parameter( Mandatory = $true, ValueFromPipeline = $true )] [MySql.Data.MySqlClient.MySqlCommand] $command ) (Select-String "@\w+" -input $command.CommandText -AllMatches).Matches.Value | ForEach-Object { if ($_) { $command.Parameters[$_].Value = $queryParams[$_] } } | Out-Null $affectedRows = $command.ExecuteNonQuery() return $affectedRows } function MySQLquery { [OutputType([System.Data.DataTable])] param ( # QueryParams [Parameter( Mandatory = $false )] [hashtable] $queryParams = @{}, # Command [Parameter( Mandatory = $true, ValueFromPipeline = $true )] [MySql.Data.MySqlClient.MySqlCommand] $command ) (Select-String "@\w+" -input $command.CommandText -AllMatches).Matches.Value | ForEach-Object { if ($_) { $command.Parameters[$_].Value = $queryParams[$_] } } | Out-Null $dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($command) $dataSet = New-Object System.Data.DataSet $dataAdapter.Fill($dataSet, "data") | Out-Null return , $dataSet.Tables["data"] }
Examples
Preparing some statements
$insertVM = $SQLConnection | MySQLprepare -query "INSERT INTO virtual_machines ( id, name, description, status ) VALUES ( @id, @name, @description, 'new' );" $selectVMs = $SQLConnection | MySQLprepare -query "SELECT * FROM virtual_machines WHERE status LIKE @status;" $updateVM = $SQLConnection | MySQLprepare -query "UPDATE virtual_machines SET status = @status WHERE id = @id;"
Executing them
$insertVM | MySQLexec -queryParams @{"@id" = 1; "@name" = 'test'; "@description" = 'example vm'} | Out-Null $dtVMs = $selectVMs | MySQLquery -queryParams @{"@status" = 'new'} foreach ($vm in $dtVMs.Rows) { Write-Host "Working on VM" $vm["id"] -ForegroundColor Cyan $updateVM | MySQLexec -queryParams @{"@id" = $vm["id"]; "@status" = 'ready'} | Out-Null }