如何在文本文件中捕获 PowerShell 启动的命令的错误消息?
我在网上搜索了一段时间,发现我应该可以做一些事情,比如""C:\UniServer\usr\local\mysql\bin\mysqldump.exe" -h 192.0.2.0 -u"backup" -p"longComplicatedPassword" --all-databases >"C:\Users\Zian\MySQL Database Backups\20130118221525.sql" 2>"C:\users\zian\desktop\MySQL Backup Error.txt""
将输出定向到 output.txt 并将错误定向到 errors.txt,但是当我尝试运行该命令时,出现以下错误:
cmd.exe : The filename, directory name, or volume label syntax is incorrect.
At C:\Users\Zian\Desktop\Untitled1.ps1:27 char:4
+ cmd <<<< /c $command
+ CategoryInfo : NotSpecified: (The filename, d...x is incorrect.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
此外,如果我尝试运行不以“2”开头的命令,则命令将正确执行,并且 output.txt 会捕获正确的输出。
我在看将 stderr 重定向到 powershell 中的变量但它没有帮助,因为该问题的答案建议捕获整个输出并在内存中过滤它。就我而言,我正在备份计算机上的每个数据库,由于数据库无法装入我的笔记本电脑的 RAM,因此我无法使用该问题的解决方案。
我还发现了一些关于使用的建议$err = @(command goes here)
,但除了插入那行文本外,没有任何关于如何操作的信息。我尝试使用 Serverfault 上的搜索功能搜索字符串“ @()
”,但没有返回任何结果。
我该怎么做才能将错误消息放入errors.txt中?
答案1
正如 jscott 指出的那样,该命令有效。我只是忘了添加足够的反引号。
解决方案是确保 cmd /c 之后的整行文本都有引号。