当前位置: 首页 > 编程笔记 >

Windows Powershell导出管道结果

赵嘉纳
2023-03-14
本文向大家介绍Windows Powershell导出管道结果,包括了Windows Powershell导出管道结果的使用技巧和注意事项,需要的朋友参考一下

可以将管道的结果转换成文本输出,默认是Out-Default。可以通过Get-Command -verb out查看Powershell都有哪些输出的命令。


PS C:PowerShell> get-command -Verb out

CommandType Name         Definition ----------- ----         ---------- Cmdlet      Out-Default  Out-Default [-InputObject ] Cmdlet      Out-File     Out-File [-FilePath]  [[-Encoding] Cmdlet      Out-GridView Out-GridView [-InputObject ] Cmdlet      Out-Host     Out-Host [-Paging] [-InputObject ] Cmdlet      Out-Null     Out-Null [-InputObject ] [-Verbose] Cmdlet      Out-Printer  Out-Printer [[-Name] ] [-InputObject Cmdlet      Out-String   Out-String [-Stream] [-Width ] Out-Default 将输出发送到默认的格式化程序和默认的输出 cmdlet。 Out-File 将输出发送到文件。 Out-GridView 将输出发送到单独窗口中的交互表。 Out-Host 将输出发送到命令行。 Out-Null 删除输出,不将其发送到控制台。 Out-Printer 将输出发送到打印机。 Out-String 将对象作为一列字符串发送到主机。

吸收输出结果

有的命令无论执行成功或失败都会有输出,有时不需要这些输出时可以使用 | Out-Null,这条命令的作用和 >$null 一样。尤其在函数中使用比较多,因为如果没有特别指明return 。Powershell函数会把输出结果作为函数的返回值。为了避免这种麻烦,通常在管道后加一条命令Out-Null 或 >$null吸收输出结果。


PS C:PowerShell> md ABC

    目录: C:PowerShell

Mode                LastWriteTime     Length Name ----                -------------     ------ ---- d----        2011/12/19     17:05            ABC

PS C:PowerShell> md ABD >$null PS C:PowerShell> md ABE | Out-Null

修改管道格式

之前讨论过,Powershell默认会在每行命令的末尾追加一条Out-Default,Out-Default默认包含了一条Out-Host,那是不是Out-Host就是英雄无用武之地了。事实上,可以通过Out-Host控制管道的版式。
Powershell不但会自动把管道结果发送到输出设备上,而且还会把管道结果转换成可读的文本。这个自动转换与Format-Table有点像。但是完全依靠自动转换有时会碰到很奇怪的输出结果。
例如当单独使用Get-Service时,结果会以表格的形式输出,但是使用pwd;Get-Service时Service信息以列表形式输出。


PS C:PowerShell> Get-Service

Status   Name               DisplayName ------   ----               ----------- Running  AdobeARMservice    Adobe Acrobat Update Service Stopped  AeLookupSvc        Application Experience Stopped  ALG                Application Layer Gateway Service

PS C:PowerShell> pwd;Get-Service

Path ---- C:PowerShell

Status      : Stopped Name        : THREADORDER DisplayName : Thread Ordering Server

Status      : Running Name        : TrkWks DisplayName : Distributed Link Tracking Client

第二行使用了两条命令,通过分号间隔。但是为什么Service信息会以列表显示 呢?因为经过Powershell的解释器处理,上面例子中的第二条命令会变成:
& { pwd;Get-Service} | Out-Default
Powershell在命令中没有发现特别指定的版式信息,就会尝试从第一条命令的第一个结果对象中寻找线索。并且把这种版式强加给紧接着的其它命令。
怎样避免上述问题,最好的办法就是要明确指定。
pwd;Get-Service | Out-Host

强制以文本显示

Powershell的文本转换一般发生在管道的末尾,但是如果需要对文本处理可是强制转换成文本。


PS C:PowerShell> ls . -Recurse | Out-String

 目录: C:PowerShell

Mode         LastWriteTime   Length Name ----         -------------   ------ ---- d---- 2011/12/19     17:05          ABC d---- 2011/12/19     17:06          ABD d---- 2011/12/19     17:06          ABE d---- 2011/11/29     18:21          myscript -a--- 2011/12/19     11:31      500 a.html

PS C:PowerShell> (ls | Out-String -Stream).gettype() IsPublic IsSerial Name     BaseType -------- -------- ----     -------- True     True     Object[] System.Array

Excel导出对象

管道结果导出为文本文件看起来不规整,越读起来也不方便。所以最好导出为Excel格式“csv”,这样的文件默认支持Microsft Excel程序打开,并处理。


PS C:PowerShell> Get-Service | Export-Csv a.csv

PS C:PowerShell> .a.csv

使用这些导出命令时,切忌不要在管道中使用Format-Table,否则导出的结果不正常,自己可以测试。那怎样选择属性呢?可是使用Select-Object。

Html导出对象

Html导出对象和Excel导出大同小异。


PS C:PowerShell> Get-Service | ConvertTo-Html -Title "ls result" | Out-File a.html

PS C:PowerShell> .a.html

 类似资料:
  • 我在DynamoDB有一个表,它有数百万条记录。我已经根据标准创建了一个二级索引(GSI),并基于此筛选产品。现在,我想使用AWS数据管线从表中查询产品并将其导出到S3。 a)我们可以在管道中指定GSI名称吗?因为使用数据管道对大型表进行查询会因为超时问题而被取消。[管道配置有6小时的最大等待时间,它正在达到并被取消]?b)有没有更好的方法来使用GSI索引从表中快速创建导出转储? 请分享你的观点。

  • 问题内容: 本质上,我正在尝试替换: 为了避免使用硬盘驱动器,请在C ++中使用管道。这是我的代码: 我绝对可以确保上述字符串已正确初始化。但是,发生了两件事对我来说没有意义: (1)我正在执行的程序报告“输入文件为空”。由于我未使用“ <”调用程序,因此不应期望输入文件。相反,它应该期待键盘输入。此外,它应该阅读“ gulp_command”中包含的文本。 (2)程序的报告(通过标准输出提供)出

  • 我根据下面亚历克斯的建议进行了改进。我需要的是下面的图片。然而,每一行/每一行应该是一个评论:带有日期、评级、评论文本和链接。 我需要让项目处理者处理每一页的每次审查 目前,TakeFirst()只对页面进行第一次审阅。所以10页,我只有10行,如下图所示。 蜘蛛代码如下:

  • 我有一个发布管道,它结合了两个构建管道工件来创建完整的版本。完成后,我需要能够下载此任务的结果。 我运行存档任务来压缩结果,但我不知道如何将其保存到可以使用Azure Pipeline代理下载的位置。 有没有可以触发下载的任务,或者我可以将其保存为神器? 谢谢

  • 无状态管道是纯粹的功能,通过输入数据流动而不记住任何东西或引起可检测的副作用。 大多数管道是无状态的。 我们使用的CurrencyPipe和我们创建的长度管是无状态管的示例。 状态管道是能够管理它们转换的数据的状态的管道。 创建HTTP请求,存储响应并显示输出的管道是有状态的管道。 有状态管道应谨慎使用。 Angular 2提供 ,这是有状态的。 View Example 实现有状态管道 // n

  • 传递参数 链接管道 我们可以将多个管道连接在一起,以便在一个表达式中使用多个管道。