Reputation: 64943
I'm trying to run the following command:
&$parameterHash["mysql"] -u $parameterHash["user"] -p"$($parameterHash['password'])" -h $parameterHash["host"] $parameterHash['database'] `< $parameterHash['backup-path']
Pay attention to this part of the whole command:
$parameterHash['database'] `< $parameterHash['backup-path']
This is the syntax of mysql
command-line to restore a backup (i.e. a SQL script) from a file system location to a given database by its name.
First of all, I had to escape >
in Powershell with a backtick.
The issue is that the entire command isn't recognized by mysql
command line when I run it from Powershell. Once I run it, mysql
outputs the help.
If I output the command as a string and I try to run it in regular CMD
(i.e. cmd.exe
) it works as expected.
For now, I can't figure out what's going on.
I've also tried this:
$restoreArgs = "-u $($parameterHash["user"]) -p""$($parameterHash['password'])"" -h $($parameterHash["host"]) $($parameterHash['database']) < $($parameterHash['backup-path'])"
Start-Process $parameterHash["mysql"] $restoreArgs
...and I got the same result.
Upvotes: 1
Views: 931
Reputation: 200293
PowerShell doesn't support input redirection, only output redirection. I don't have MySQL at hand right now, so I can't test, but you could try
Get-Content $parameterHash['backup-path'] | &$parameterHash["mysql"] -u $parameterHash["user"] -p"$($parameterHash['password'])" -h $parameterHash["host"] $parameterHash['database']
If the input must be a single string call Get-Content
with the parameter -Raw
(PowerShell v3 and newer):
Get-Content $parameterHash['backup-path'] -Raw | ...
or pipe the Get-Content
output through Out-String
first:
Get-Content $parameterHash['backup-path'] | Out-String | ...
Another option is to run the commandline with CMD, which does support input redirection:
$mysql = $parameterHash["mysql"]
$user = $parameterHash["user"]
$pass = $parameterHash['password']
$server = $parameterHash["host"]
$db = $parameterHash['database']
$backup = $parameterHash['backup-path']
cmd /c "$mysql -u $username -p $password -h $server -d $db < $backup"
Upvotes: 3