gpt4 book ai didi

PowerShell:重定向 mysqldump.exe 的错误

转载 作者:行者123 更新时间:2023-11-29 07:08:00 24 4
gpt4 key购买 nike

这是我用来备份我的一个 MySQL 数据库的命令:

mysqldump.exe --user=myuser --password=mypassword --databases --opt MyDatabase > "C:\MyDatabase.sql"

我想在 PowerShell 脚本中使用此命令。但是,如果发生错误,我不希望将其输出到控制台。相反,我希望它被捕获在一个变量中。我一直在尝试各种方法来做到这一点,但都失败了。任何援助将不胜感激。谢谢!

最佳答案

首先要注意>如果您的数据库转储不需要使用 Unicode,而是使用 ASCII。您会改用 | out-file $filepath -enc ascii确保它以 ASCII 编码写入。 (我的数据库是 latin1。如果我使用 Powershell 的 > 转储文件是从普通控制台使用 > 转储时的两倍大。)

就是说,我把它转储到一个 ASCII 格式的文件中,并以这种方式将错误放入一个变量中(通过尝试转储一个不存在的数据库来强制出错,但是 mysqldump 输出了一些转储的初始化行在它抛出错误之前):

$err = (mysqldump -uroot -p --databases nonexistent | out-file C:\backup.sql -enc ascii) 2>&1

这会包装执行,以便将标准输出通过管道传输到 out-file ,但在包装之后,stderr 被重定向到 stdout,以便它可以分配给变量 $err。

$err是 1 ErrorRecord或者更多。单个错误有一个 TargetObject包含原始 stderr 输出的属性。这是将每个错误字符串打印到控制台的演示:

if ($err -is [system.array]) {
$err | % { write-host $_.TargetObject }
} else {
write-host $err.TargetObject
}

或者,您可以确保 $err是一个数组,通过将其包装成 @() 来稍微修改原始转储语句。 (好主意,迈克):

$err = @((mysqldump -uroot -p --databases nonexistent | out-file C:\backup.sql -enc ascii) 2>&1)

关于PowerShell:重定向 mysqldump.exe 的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6205709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com