`

PowerShell基础教程(8)——Out-* Cmdlet 重定向数据

阅读更多

PowerShell基础教程(8)——Out-* Cmdlet 重定向数据             <o:p></o:p>

Windows PowerShell 为您提供了多个用于直接控制数据输出的 cmdlet。这些 cmdlet 具有两个重要的共同特征。

第一,它们通常都将数据转换为某种文本形式。这是因为它们要将数据输出到需要接受文本输入的系统组件。这意味着它们需要以文本形式表示对象。因此,文本格式将与 Windows PowerShell 控制台窗口中所显示的格式相同。

第二,这些 cmdlet 都使用 Windows PowerShell 动词 Out,这是因为它们要将信息从 Windows PowerShell 中发送到其他位置。Out-Host cmdlet 也不例外:主机窗口显示位于 Windows PowerShell 之外。这一特征十分重要,因为从 Windows PowerShell 发出数据时,实际上将删除该数据。如果试图创建将数据分页发送到主机窗口的管道,然后尝试将其格式设置为列表,则会看到此类情况,如下所示:

PS> Get-Process | Out-Host -Paging | Format-List<o:p></o:p>

<o:p> </o:p>

您可能希望该命令以列表格式来显示进程信息页面。实际上,它将显示默认的表格格式列表:

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName<o:p></o:p>

-------  ------    -----      ----- -----   ------     -- -----------<o:p></o:p>

101       5     1076       3316    32     0.05   2888 alg<o:p></o:p>

...<o:p></o:p>

618      18    39348      51108   143   211.20   740 explorer<o:p></o:p>

257      8    9752      16828   79   3.02   2560 explorer<o:p></o:p>

...<o:p></o:p>

<SPACE> 下一页;<CR> 下一行;Q 退出<o:p></o:p>

...<o:p></o:p>

<o:p> </o:p>

Out-Host cmdlet 将数据直接发送到控制台因此 Format-List 命令将不会收到任何要进行格式设置的输入项。

若要构建此命令的结构,正确方式是将 Out-Host cmdlet 放在管道末尾,如下所示。这样将导致先在列表中设置进程数据的格式,然后再进行分页和显示。

PS> Get-Process | Format-List | Out-Host -Paging<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

Id      : 2888<o:p></o:p>

Handles : 101<o:p></o:p>

CPU     : 0.046875<o:p></o:p>

Name     alg<o:p></o:p>

...<o:p></o:p>

<o:p> </o:p>

Id      : 740<o:p></o:p>

Handles : 612<o:p></o:p>

CPU     : 211.703125<o:p></o:p>

Name     explorer<o:p></o:p>

<o:p> </o:p>

Id      : 2560<o:p></o:p>

Handles : 257<o:p></o:p>

CPU     : 3.015625<o:p></o:p>

Name     explorer<o:p></o:p>

...<o:p></o:p>

<SPACE> 下一页;<CR> 下一行;Q 退出<o:p></o:p>

...<o:p></o:p>

<o:p> </o:p>

此方式适用于所有 Out cmdletOut cmdlet 应始终出现在管道末尾。

<!----><!----><!---->请注意 <o:p></o:p>

所有 Out cmdlet 都以文本形式呈现输出并使用控制台窗口的有效格式设置包含行长度限制进行显示。<o:p></o:p>

对控制台输出进行分页 (Out-Host)<o:p></o:p>

默认情况下,Windows PowerShell 会将数据发送到主机窗口,这与 Out-Host cmdlet 的作用完全相同。正如上文中所述,Out-Host cmdlet 的主要用途是将数据进行分页。例如,以下命令使用 Out-Host Get-Command cmdlet 的输出进行分页:

PS> Get-Command | Out-Host -Paging<o:p></o:p>

<o:p> </o:p>

也可以使用 more 函数来对数据进行分页。在 Windows PowerShell 中,more 是一个称为 Out-Host -Paging 的函数。以下命令演示了如何使用 more 函数来对 Get-Command 的输出进行分页:

PS> Get-Command | more<o:p></o:p>

<o:p> </o:p>

如果将一个或多个文件名用作 more 函数的参数则该函数将读取指定的文件并将其内容分页发送到主机

PS> more c:\boot.ini<o:p></o:p>

[boot loader]<o:p></o:p>

timeout=5<o:p></o:p>

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<o:p></o:p>

[operating systems]<o:p></o:p>

...<o:p></o:p>

<o:p> </o:p>

放弃输出 (Out-Null)<o:p></o:p>

Out-Null cmdlet 是专为立即放弃其接收的任何输入而设计的。如果希望放弃作为运行命令的副产品而获得的不需要的数据,则此命令十分有用。键入以下命令后,将不会返回任何输出:

PS> Get-Command | Out-Null<o:p></o:p>

<o:p> </o:p>

Out-Null cmdlet 不会放弃错误输出。例如如果输入以下命令将显示一条消息通知您 Windows PowerShell 无法识别Is-NotACommand”:

PS> Get-Command Is-NotACommand | Out-Null<o:p></o:p>

Get-Command :无法将Is-NotACommand识别为 cmdlet、函数、可运行程序<o:p></o:p>

或脚本文件。<o:p></o:p>

所在行:1 字符:12 <o:p></o:p>

+ Get-Command  <<<< Is-NotACommand | Out-Null<o:p></o:p>

<o:p> </o:p>

打印数据 (Out-Printer)<o:p></o:p>

可以使用 Out-Printer cmdlet 来打印数据。如果未提供打印机名称,则 Out-Printer cmdlet 将使用默认打印机。通过指定打印机的显示名称,您可以使用任何基于 Windows 的打印机。无需指定任何种类的打印机端口映射,甚至无需指定真实的物理打印机。例如,如果安装了 Microsoft Office 文档图像工具,可以通过键入以下命令将数据发送到图像文件:

PS> Get-Command Get-Command | Out-Printer -Name "Microsoft Office Document Image Writer"<o:p></o:p>

<o:p> </o:p>

保存数据 (Out-File)<o:p></o:p>

通过使用 Out-File cmdlet可以将输出发送到文件而不是控制台窗口。以下命令行将一个进程列表发送到文件 C:\temp\processlist.txt

PS> Get-Process | Out-File -FilePath C:\temp\processlist.txt <o:p></o:p>

<o:p> </o:p>

如果习惯于传统的输出重定向则使用 Out-File cmdlet 的结果可能与您的预期结果不同。若要了解此命令的行为,您必须了解运行 Out-File cmdlet 的上下文。

默认情况下,Out-File cmdlet 将创建 Unicode 文件。从长远的角度来看,这是最佳的默认值,但这意味着预期使用 ASCII 文件的工具将无法正确处理该默认输出格式。可以使用 Encoding 参数来将默认输出格式更改为 ASCII

PS> Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII<o:p></o:p>

<o:p> </o:p>

Out-file 将文件内容的格式设置为与控制台输出的格式一样。这样将导致在大多数情况下输出将像在控制台窗口中一样发生截断。例如,如果运行以下命令:

PS> Get-Command | Out-File -FilePath c:\temp\output.txt<o:p></o:p>

<o:p> </o:p>

输出将与以下所示类似:

CommandType     Name                            Definition                     <o:p></o:p>

-----------     ----                            ----------                     <o:p></o:p>

Cmdlet          Add-Content                     Add-Content [-Path] <String[...<o:p></o:p>

Cmdlet          Add-History                     Add-History [[-InputObject] ...<o:p></o:p>

...<o:p></o:p>

<o:p> </o:p>

若要获得不强行进行换行以匹配屏幕宽度的输出可以使用 Width 参数来指定行宽。由于 Width 32 位整数参数因此其最大值为 2147483647。键入以下命令可以将行宽设置为此最大值:

Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647<o:p></o:p>

<o:p> </o:p>

如果希望按照控制台上所显示的格式对输出进行保存 Out-File cmdlet 尤其有用。若要更好地控制输出格式,您需要使用更高级的工具。我们将在下一章介绍这些工具,并提供有关对象操作的一些详细信息。

 
分享到:
评论

相关推荐

    Professional Windows PowerShell Programming.pdf

    通过对 Snap-ins、Cmdlets、Hosts 和 Providers 的深入讨论,读者不仅能够掌握 PowerShell 的基础知识,还能够学习到如何扩展其功能以满足更复杂的管理需求。此外,书中的案例研究和实践指南为读者提供了实用的指导...

    Windows PowerShell 实战

    - **Pipeline**:类似于Unix的管道,PowerShell允许将一个Cmdlet的输出作为另一个Cmdlet的输入,实现数据流的传递。 - **PowerShell工作区**:工作区包含了当前会话中的所有变量、函数和状态信息。 2. **...

    Windows PowerShell每周提示

    - **WS-Man(Windows Management Infrastructure)**:PowerShell Remoting的基础技术。 7. **PowerShell作业** - **后台作业**:通过`Start-Job`启动非阻塞任务。 - **工作流**:使用`Workflow`关键字创建长...

    Windows PowerShell入门学习教材

    - **Out-*Cmdlet**:用于重定向输出数据,例如 `Out-File` 用于将输出保存到文件中,`Out-Null` 用于丢弃输出,`Out-Host` 用于分页显示输出等。 #### Windows PowerShell 导航 - **管理当前位置**:使用 `Get-...

    Windows Powershell - EN.pdf

    - **Cmdlets(命令lets)**:PowerShell的基础是Cmdlets,它们是一组预定义的、功能单一的命令,如`Get-Process`或`Stop-Service`。Cmdlets遵循一致的命名规则,易于理解和记忆。 - **提供者(Providers)**:提供...

    powershell用户手册

    - **使用 Out-* Cmdlet 进行数据重定向**:PowerShell 提供了一系列以 `Out-` 开头的 Cmdlet,用于控制输出流向。 - **分页显示控制台输出(Out-Host)**:当输出较长时,可以使用此命令分页显示结果。 - **丢弃...

    Windows PowerShell入门指南

    - **启动 Windows PowerShell**:用户可以通过多种方式启动 Windows PowerShell,例如通过“开始”菜单、运行对话框或桌面快捷方式等。此外,还可以通过命令行参数来定制启动选项。 - **使用 Get-Help 获取帮助**:...

    windows powershell

    - **powershell 教程**:这可能是另一份教程资料,可能专注于特定的PowerShell主题或场景,帮助读者深入理解PowerShell的使用。 掌握Windows PowerShell对于任何Windows管理员来说都至关重要,它能提高工作效率,...

    Windows PowerShell 入门指南

    - **使用 Cmdlet 参数**: 掌握如何使用 cmdlet 的各种参数来精确控制 cmdlet 的行为,这对于高效地使用 Windows PowerShell 至关重要。 - **通用参数**: 了解 Windows PowerShell 中的一些通用参数,如 `-Verbose`、...

    Windows+Powershell入门指南(中文)-微软资料

    - **Cmdlet**:PowerShell 引入了一种新的命令类型——cmdlet,即 "command-let" 的缩写。这些cmdlet设计简洁,每个都专注于执行单一的任务,但通过组合使用可以完成复杂的操作。PowerShell 自带了一百多种基本...

    Windows PowerShell 教程

    ### Windows PowerShell 教程知识点详解 #### 一、Windows PowerShell 概述 - **定义**:Windows PowerShell 是一种强大的命令行脚本环境,它能够帮助用户实现对Windows系统的高效管理和自动化控制。相比于传统的...

    20.Powershell基础入门及常见用法(二)1

    【Powershell基础入门及常见用法(二)1】这篇教程主要涵盖了Powershell的高级语法和常用操作,尤其对于网络安全领域的应用进行了讲解。以下是文章中的关键知识点: 1. **Powershell操作符**: - 包括比较操作符...

    Windows PowerShell Step by Step ( PDFDrive.com ).pdf

    它不仅详细介绍了 Windows PowerShell 的基础知识,还涵盖了高级主题,如远程管理、脚本编写和函数使用等。无论你是想提高工作效率还是深化对 Windows PowerShell 的理解,这本书都是一个不可多得的好资源。

    PowerShell

    **PowerShell**是一种由微软开发的命令行外壳和脚本语言,专为系统管理和自动化设计。它在Windows XP、Windows Server 2003、Windows Vista以及后续版本中均有应用,并在Windows Server 2008中扮演着重要角色。...

    Windows Powershell - EN

    学习与使用 PowerShell** - **入门教程**:Microsoft 提供了官方文档和在线教程,帮助初学者快速上手。 - **ISE 和 VSCode 扩展**:PowerShell Integrated Scripting Environment (ISE) 是早期的开发工具,而 ...

    Windows PowerShell应用手册

    ### Windows PowerShell应用手册知识点概述 #### 一、引言 本书由Windows PowerShell团队开发人员Lee Holmes撰写,旨在为读者提供全面且深入的PowerShell使用指南。全书通过一系列实际应用场景来展示如何运用...

    PowerShell 教程

    在这个"PowerShell教程"中,我们将深入探讨其核心概念、基本语法以及常用命令。 **1. PowerShell的核心概念** - **PowerShell会话(Session)**:也称为运行空间,是执行PowerShell命令和脚本的环境。 - **...

Global site tag (gtag.js) - Google Analytics