我遇到了一些问题。我在powershell中编写脚本来运行批处理文件并将stderror和stdout保存到文件(stdout:stdout.txt
; stderr:stderr.txt
并合并stdout和stderr:AllOutput.txt
test.ps1:
$allOutput = & C:\foo.bat 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
Write-Host $allOutput
$allOutput | Out-File AllOutput.txt
$stdout | Out-File StdOut.txt
$stderr | Out-File StdErr.txt
foo.bat
文件执行一些代码和bar.bat脚本:
dir
echo test
c:\bar.bat
echo endFoo
bar.bat
文件执行此exaple代码:
echo test
cd DDDDDD #not exists to get error
cd EEEEEE #not exists to get error
echo endBar
当我直接在服务器上运行test.ps1时,我得到AllOutput.txt
正确的顺序 - 当stderr出错时我会在命令后得到它。但是当我通过Invoke-Command -computerName serverName -File C:\test.ps1
或Invoke-Command -computerName serverNAme -File \\serverPath\test3.ps1
在远程服务器上启动它时,我得到的输出顺序错误 - 有时连续出现stderr的两个错误,有时是文件末尾的错误。
如何执行或以正确的方式重写?