在 db2 命令中使用时,PowerShell tee-Object 在输出中生成空行 [英] PowerShell tee-Object generates empty lines in output, when used in db2 commands

查看:139
本文介绍了在 db2 命令中使用时,PowerShell tee-Object 在输出中生成空行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我使用 powershell tee-object cmdlet 将输出保存到文件时,在每个实际行之间创建了空行.无论是在屏幕输出还是在重定向文件中,输出都会翻倍且丑陋.

When I use powershell tee-object cmdlet to save the output to a file, blank lines are created between each actual line. Output gets doubled and ugly, in both screen output, as well in the redirected file.

常规命令和输出:

# db2 connect to sample

   Database Connection Information

 Database server        = DB2/NT64 11.5.0.0
 SQL authorization ID   = SAMUEL
 Local database alias   = SAMPLE

但是,当您对它使用 Tee-Object 时……会发生以下情况:

but, when you use Tee-Object against it... here is what happens:

# db2 connect to sample |  Tee-Object test.out


   Database Connection Information



 Database server        = DB2/NT64 11.5.0.0

 SQL authorization ID   = SAMUEL

 Local database alias   = SAMPLE

在屏幕输出和生成的文件中都有一个井:

In both screen output, and also in the generated file a well:

# type test.out


   Database Connection Information



 Database server        = DB2/NT64 11.5.0.0

 SQL authorization ID   = SAMUEL

 Local database alias   = SAMPLE

--- 编辑---@js2010,这里是完整的十六进制格式,以便更好地阅读.. 无法将其正确粘贴到评论中.

--- edit --- @js2010, here is the entire hex-format for better reading.. cant paste it properly in the comments.

# format-hex test.out


           Path: E:\PowerShell_Tests\db2mon\test.out

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   FF FE 0D 00 0A 00 0D 00 0A 00 20 00 20 00 20 00  .þ........ . . .
00000010   44 00 61 00 74 00 61 00 62 00 61 00 73 00 65 00  D.a.t.a.b.a.s.e.
00000020   20 00 43 00 6F 00 6E 00 6E 00 65 00 63 00 74 00   .C.o.n.n.e.c.t.
00000030   69 00 6F 00 6E 00 20 00 49 00 6E 00 66 00 6F 00  i.o.n. .I.n.f.o.
00000040   72 00 6D 00 61 00 74 00 69 00 6F 00 6E 00 0D 00  r.m.a.t.i.o.n...
00000050   0A 00 0D 00 0A 00 0D 00 0A 00 0D 00 0A 00 20 00  .............. .
00000060   44 00 61 00 74 00 61 00 62 00 61 00 73 00 65 00  D.a.t.a.b.a.s.e.
00000070   20 00 73 00 65 00 72 00 76 00 65 00 72 00 20 00   .s.e.r.v.e.r. .
00000080   20 00 20 00 20 00 20 00 20 00 20 00 20 00 3D 00   . . . . . . .=.
00000090   20 00 44 00 42 00 32 00 2F 00 4E 00 54 00 36 00   .D.B.2./.N.T.6.
000000A0   34 00 20 00 31 00 31 00 2E 00 35 00 2E 00 30 00  4. .1.1...5...0.
000000B0   2E 00 30 00 0D 00 0A 00 0D 00 0A 00 20 00 53 00  ..0......... .S.
000000C0   51 00 4C 00 20 00 61 00 75 00 74 00 68 00 6F 00  Q.L. .a.u.t.h.o.
000000D0   72 00 69 00 7A 00 61 00 74 00 69 00 6F 00 6E 00  r.i.z.a.t.i.o.n.
000000E0   20 00 49 00 44 00 20 00 20 00 20 00 3D 00 20 00   .I.D. . . .=. .
000000F0   53 00 41 00 4D 00 55 00 45 00 4C 00 0D 00 0A 00  S.A.M.U.E.L.....
00000100   0D 00 0A 00 20 00 4C 00 6F 00 63 00 61 00 6C 00  .... .L.o.c.a.l.
00000110   20 00 64 00 61 00 74 00 61 00 62 00 61 00 73 00   .d.a.t.a.b.a.s.
00000120   65 00 20 00 61 00 6C 00 69 00 61 00 73 00 20 00  e. .a.l.i.a.s. .
00000130   20 00 20 00 3D 00 20 00 53 00 41 00 4D 00 50 00   . .=. .S.A.M.P.
00000140   4C 00 45 00 0D 00 0A 00 0D 00 0A 00 0D 00 0A 00  L.E.............
00000150   0D 00 0A 00                                      ....

此外,您的第二个测试表明问题不在于使用 tee-object cmdlet,而实际上,只是通过管道输出导致它...

Also, your 2nd test reveals that the problem is not about using tee-object cmdlet, but actually, just piping the output causes it...

另一个信息,如果我从常规的 Windows cmd 窗口执行重定向到文件,则不会发生此问题,

Another information, If I perform a redirect to a file, from a regular windows cmd window, the issue does not happens,

来自 cmd 窗口:

E:\PowerShell_Tests\db2mon>db2 connect to sample > cmd.out

E:\PowerShell_Tests\db2mon>type cmd.out

   Database Connection Information

 Database server        = DB2/NT64 11.5.0.0
 SQL authorization ID   = SAMUEL
 Local database alias   = SAMPLE

但是,从 powershell 会话执行相同的重定向,再次创建了双行:

but, performing the same redirect from a powershell session, created the double lines again:

# db2 connect to sample > pwsh.out
PS [Samuel]E:\PowerShell_Tests\db2mon
# Get-Content pwsh.out


   Database Connection Information



 Database server        = DB2/NT64 11.5.0.0

 SQL authorization ID   = SAMUEL

 Local database alias   = SAMPLE

---结束编辑---

--- 编辑 2 ---@js2010

--- edit 2 --- @js2010

# db2 connect to sample | format-hex


           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   20 20 20 44 61 74 61 62 61 73 65 20 43 6F 6E 6E     Database Conn
00000010   65 63 74 69 6F 6E 20 49 6E 66 6F 72 6D 61 74 69  ection Informati
00000020   6F 6E                                            on


           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   20 44 61 74 61 62 61 73 65 20 73 65 72 76 65 72   Database server
00000010   20 20 20 20 20 20 20 20 3D 20 44 42 32 2F 4E 54          = DB2/NT
00000020   36 34 20 31 31 2E 35 2E 30 2E 30                 64 11.5.0.0


           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   20 53 51 4C 20 61 75 74 68 6F 72 69 7A 61 74 69   SQL authorizati
00000010   6F 6E 20 49 44 20 20 20 3D 20 53 41 4D 55 45 4C  on ID   = SAMUEL



           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   20 4C 6F 63 61 6C 20 64 61 74 61 62 61 73 65 20   Local database
00000010   61 6C 69 61 73 20 20 20 3D 20 53 41 4D 50 4C 45  alias   = SAMPLE

--- 结束编辑 2 ---

--- end edit 2 ---

有没有人知道发生了什么,我该如何修复"它?

Does any one has any clue on what is going on, and how can I "fix" it ?

谢谢

推荐答案

正如您的 Format-Hex 输出所暗示的,db2 - 奇怪地 - 使用 CRCRLF ("`r`r`n" 在 PowerShell 术语中) 而不是通常的 CRLF 序列 ("`r`n") 作为换行符(以分隔其输出行) - 这是一个 sfc.exe 共享的行为.

As your Format-Hex output implies, db2 - bizarrely - uses CRCRLF ("`r`r`n" in PowerShell terms) rather than the usual CRLF sequences ("`r`n") as newlines (to separate its output lines) - it is a behavior it shares with sfc.exe.

当您打印到显示器时,此异常不会出现,但在您捕获或重定向输出时会出现,例如通过Tee-Object.

When you print to the display, this anomaly doesn't surface, but it does when you capture or redirect the output, such as via Tee-Object.

解决方法消除每隔一行,这会丢弃由 PowerShell 解释 CR ("`r") 本身也作为换行符:

The workaround is to eliminate every other line, which discards the extra lines that result from PowerShell interpreting a CR ("`r") by itself as a newline too:

$i = 0
db2 ... | Where-Object { ++$i % 2 } | Tee-Object test.out

更新:您已经基于此解决方案提供了一个方便的包装函数在您自己的答案中.

Update: You've since provided a convenient wrapper function based on this solution in your own answer.

这篇关于在 db2 命令中使用时,PowerShell tee-Object 在输出中生成空行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆