由于 < 字符,无法 运行 在 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"
我正在尝试 运行 以下命令:
&$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"