我正在尝试运行以下命令:
&$parameterHash["mysql"] -u $parameterHash["user"] -p"$($parameterHash['password'])" -h $parameterHash["host"] $parameterHash['database'] `< $parameterHash['backup-path']
注意整个命令的这一部分:
$parameterHash['database'] `< $parameterHash['backup-path']
这是mysql
命令行的语法,用于将备份(即 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
......我得到了同样的结果。
答案 0 :(得分:3)
PowerShell不支持输入重定向,仅支持https://github.com/rescrv/HyperDex/issues/232。我现在手头没有MySQL,所以我无法测试,但你可以试试
Get-Content $parameterHash['backup-path'] | &$parameterHash["mysql"] -u $parameterHash["user"] -p"$($parameterHash['password'])" -h $parameterHash["host"] $parameterHash['database']
如果输入必须是单个字符串,请使用参数Get-Content
(PowerShell v3和更新版本)调用-Raw
:
Get-Content $parameterHash['backup-path'] -Raw | ...
首先通过Get-Content
输出Out-String
输出:
Get-Content $parameterHash['backup-path'] | Out-String | ...
另一种选择是使用CMD运行命令行,CMD支持output 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"