与沉闷、可预测的脚本输出说再见吧!通过 PowerShell 的 Write-Output
命令,您可以为您的 PowerShell 脚本增添一丝创意和个性。
Write-Output
命令是一个强大的工具,也是您自动化和系统管理需求的完美伴侣。在本教程中,您将学会如何最大化 Write-Output
命令的潜力。
准备好了吗?继续阅读,发现 Write-Output
命令的魔力吧!
先决条件
本教程将进行实践演示。请确保您有一台安装了 PowerShell 的计算机(最好是最新版本)。本教程使用安装了 PowerShell 7 的 Windows 10。
输出对象到控制台
PowerShell 的 Write-Output
命令将对象写入输出流,并在控制台显示命令或消息的输出。但您会惊讶地发现这个工具如何使输出更有意义和价值。
代替在控制台中显示输出,使用 Write-Output
cmdlet来自定义输出。 Write-Output
cmdlet可以输出任何对象或数据类型,如字符串,整数,数组,甚至是复杂对象。
运行以下命令将 Hello, World! 消息输出到控制台。
以下是 Write-Output
cmdlet的最基本功能。 但是继续阅读以了解更多此cmdlet的中级到高级用法。 <>

将对象传递给另一个命令
除了在控制台中显示输出外,您还可以使用 Write-Output
命令将对象发送到另一个命令进行进一步处理。 如何? 通过使用管道运算符( |
)。 流水线处理 使 Write-Output
成为自动化和系统管理任务的方便而多功能的命令。
假设您想查看哪个进程消耗了大部分资源,例如CPU。
运行以下命令执行以下操作:
- 检索系统上运行的所有进程的列表(
Get-Process
)。 - 将列表输出到管道,然后传递给
Sort-Object
命令。管道运算符允许您将多个命令链接在一起,并将一个命令的输出作为另一个命令的输入进行处理。 - 按照它们的
CPU
使用情况按-Descending
顺序对进程列表进行排序(Sort-Object
)。
请注意,您可以将本教程中的任何命令放入PowerShell脚本中并运行它。
排序后的列表显示在控制台中,如下所示。

使用自定义格式输出对象
您已经看到了Write-Output cmdlet的基本输出格式,这很好用。但如果您愿意,您也可以输出带有自定义格式的对象以添加个人风格。当您希望显示特定对象属性或自定义输出外观时,自定义格式可能很有用。
要使用自定义格式输出对象,Format-Custom
与Write-Output
cmdlet一起使用,如下所示:
创建自定义输出格式,然后将Format-Custom cmdlet的输出导入Write-Output。<>
运行下面的命令,它不会产生输出,而是创建一个包含三个属性及其相应值以输出的对象(一个散列表)。
现在,运行下面的命令执行以下操作:
- 为哈希表的输出(
Write-Output
)创建自定义格式(Format-Table
)。将Property1
、Property2
和Property3
属性设置为列。 - 调整列宽(
-AutoSize
)以适应内容。

或者,您可以使用 Format-List
命令与 Write-Output
将对象输出为属性-值对的列表。

将集合对象作为单个实体传递
默认情况下,Write-Output
将每个集合元素单独通过管道发送,这个过程称为枚举。但是,您可以通过附加 -NoEnumerate
参数来阻止此行为,将整个集合对象作为单个实体传递。
要查看 -NoEnumerate
参数的工作原理,按照以下步骤操作:
运行下面的命令执行以下操作:
- 声明一个从一到三的
$numbers
数组(1,2,3
)。
- 计算通过管道传递的对象数目(
Measure-Object
)。 - 输出对象测量(
Write-Output $numbers
)。
没有使用NoEnumerate
参数,Measure-Object
返回计数为三(3),因为$numbers
数组的每个元素都被枚举并单独通过管道传递。

现在,运行以下命令以输出通过管道传递的对象计数。
但是,由于您附加了-NoEnumerate
参数,Measure-Object
命令将对象视为单个实体,返回计数为一(1)。

将
Write-Output
命令放在括号中(即(Write-Output 1,2,3)
)将强制进行枚举,而不管-NoEnumerate
参数如何。
创建菜单系统和输入提示
使用Write-Output
命令创建一个带有PowerShell脚本的菜单系统,提示用户输入。
使用首选的文本/代码编辑器创建一个.ps1文件,填充下面的代码,并保存文件。您可以根据喜好命名文件,但本教程选择myoutput.ps1。
下面的代码使用循环不断提示用户从选项列表中选择选项,直到用户选择退出
选项。
现在,从工作目录中运行脚本(myoutput.ps1
)。
如下所示,当您选择选项 1、2 或 3 时,将显示与您的选择相关联的消息。但是当您选择选项 4 时,脚本将终止。

显示启动画面或欢迎消息
除了列出用户可以选择的选项之外,使用Write-Output
,您还可以显示一个启动画面或欢迎消息。华丽的启动画面可以给您的脚本留下良好的印象(专业和精细)。
请使用下面的代码替换您的myoutput.ps1文件中的代码,运行脚本时将输出一个启动画面(欢迎信息的横幅)。
您可以通过修改横幅的文本和格式来自定义启动画面。您可以根据需要添加额外的元素,如标志或文本,到启动画面中。
现在运行脚本,看看您的启动画面是什么样子的。

显示进度条
当运行脚本时,进度指示器可以消除用户对脚本是否正在运行的不确定性。进度条可以用于向用户指示长时间运行的脚本或操作的进度。幸运的是,使用Write-Output
cmdlet,您可以根据自己的喜好创建一个进度条。
打开您的myoutput.ps1文件,在脚本文件中的现有代码底部添加以下代码。
下面的代码使用while
循环来迭代多个步骤。在这个例子中,有100个步骤。循环的每次迭代计算已完成的步骤的百分比,并使用Write-Output
显示一个进度条。
进度条是使用以下运算符组合创建的:
*
– 重复一个字符串指定的次数$()
– 允许将表达式的输出包含在字符串中。
然后脚本暂停(Start-Sleep
)1秒钟以模拟进度,然后继续下一步。
现在运行脚本,看看进度条如何工作。
下面,您可以看到闪屏以及进度条。

结论
在本教程中,您已经了解了如何使用Write-Output
轻松输出对象、数据类型和自定义格式。此外,您还了解了使用管道运算符将输出发送到其他命令以进行进一步处理。
无论您是编写简单的消息输出还是复杂的自动化任务,Write-Output
都是创建更具信息量和专业性的PowerShell脚本的不可或缺的工具。
有了这些新发现的知识,为什么不将您的输出写入不同的文件类型,比如.txt和.xml文件呢?无论意图如何,输出副本在排查系统或应用程序问题时都非常方便。Write-Output
和Out-File
命令让您拥有您从未意识到需要的力量。
Source:
https://adamtheautomator.com/powershell-write-output/