由于 < 字符,无法 运行 在 Powershell 上恢复数据库

Cannot run a database restore on Powershell because of < character

我正在尝试 运行 以下命令:

&$parameterHash["mysql"] -u $parameterHash["user"] -p"$($parameterHash['password'])" -h $parameterHash["host"] $parameterHash['database'] `< $parameterHash['backup-path']

注意整个命令的这部分:

$parameterHash['database'] `< $parameterHash['backup-path']

这是 mysql 命令行的语法,用于将备份(即 a SQL 脚本 )从文件系统位置还原到给定的数据库的名称。

首先,我不得不在 Powershell 中用反引号转义 >

问题是当我从 Powershell 运行 时,mysql 命令行无法识别整个命令。一旦我 运行 它,mysql 输出帮助。

如果我将命令输出为字符串并尝试 运行 以常规 CMD(即 cmd.exe)它按预期工作。

目前,我无法弄清楚发生了什么。

更新

我也试过这个:

$restoreArgs = "-u $($parameterHash["user"]) -p""$($parameterHash['password'])"" -h $($parameterHash["host"]) $($parameterHash['database']) < $($parameterHash['backup-path'])"
Start-Process $parameterHash["mysql"] $restoreArgs

...我得到了相同的结果。

PowerShell 不支持输入重定向,仅 output redirection。我现在手头没有 MySQL,所以我无法测试,但你可以试试

Get-Content $parameterHash['backup-path'] | &$parameterHash["mysql"] -u $parameterHash["user"] -p"$($parameterHash['password'])" -h $parameterHash["host"] $parameterHash['database']

如果输入必须是带有参数 -Raw 的单个字符串调用 Get-Content(PowerShell v3 和更新版本):

Get-Content $parameterHash['backup-path'] -Raw | ...

或者先通过 Out-String 管道 Get-Content 输出:

Get-Content $parameterHash['backup-path'] | Out-String | ...

另一种选择是 运行 使用 CMD 的命令行,它支持 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"