当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Tee-Object:PowerShell 中使用率最低的 Cmdlet

作者:精品下载站 日期:2024-12-14 12:36:28 浏览:16 分类:玩电脑

Tee-Object:PowerShell 中使用率最低的 Cmdlet


Tee-Object 是一直存在但很少使用的 PowerShell cmdlet 之一。在我近 10 年的 PowerShell 开发工作中,我可以依靠两只手,我需要甚至想过使用这个 cmdlet,但当我这样做时,它效果很好!

将 Tee 对象与文件一起使用

Tee-Object 到底有什么作用? Tee-Object 基本上是一石二鸟。此 cmdlet 重定向 PowerShell 命令的输出,并将其保存到文件或变量,同时还将输出返回到管道。它允许脚本编写者一次保存输出并通过管道发送输出。

假设开发人员想要将一些文本发送到文件,然后对同一文本执行某种任务。也许我们正在从计算机中提取 Windows 服务列表并将输出保存到文本文件中,以便在尝试启动服务之前创建之前状态的快照。此任务可以通过两个单独的步骤完成,也可以使用 Tee-Object 单独完成。

如果没有 Tee-Object,此任务可能如下所示:

PS> $servicesToStart = 'wuauserv','WebClient'
PS> Get-Service -Name $servicesToStart | Out-File -FilePath 'C:\ServicesBefore.txt'
PS> Get-Service -Name $servicesToStart | Start-Service

此方法有效,但有更好的方法使用 Tee-ObjectTee-Object cmdlet 有一个 FilePath 参数,我们可以使用它来将输出保存到文件中。下面是使用 Tee-Object 执行相同任务的情况。请注意我们如何使用管道将对象从一个命令传输到下一个命令。

PS> $servicesToStart = 'wuauserv','WebClient'
PS> Get-Service -Name $servicesToStart | Tee-Object -FilePath 'C:\ServicesBefore.txt' | Start-Service

此方法始终替换文件中的文本。如果我们想在文件中附加文本,我们可以使用 Append 开关参数。

将 Tee 对象与变量一起使用

Tee-Object PowerShell cmdlet 还具有一个变量参数,该参数不是将输出发送到文件,而是将输出发送到变量。我们可以简单地使用 Tee- 上的 Variable 参数,而不是首先将 Get-Service 的输出分配给变量 $serviceStatusBefore对象来创建变量并将输出发送到那里。然后,由于 Tee-Object 始终将其接收到的输入返回到管道,因此我们可以将其用作 Start-Service 的输入,就像在上面的示例中所做的那样。

PS> $servicesToStart = 'wuauserv','WebClient'
PS> Get-Service -Name $servicesToStart | Tee-Object -Variable 'serviceStatusBefore' | Start-Service
PS> $serviceStatusBefore
Status Name DisplayName
------ ---- ------------
Running WebClient WebClient
Running wuauserv Windows Update

包起来

Tee-Object 是 PowerShell 命令之一,这些命令在 PowerShell 代码中不一定是必需的,但可以使其更干净、密度更低。使用 Tee-Object 允许开发人员减少代码行数,但执行完全相同的任务。诚然,删除代码有时确实会降低代码的可读性,但这取决于开发人员来决定这种权衡!

每当您需要将命令输出保存到文件或变量时,请查看 Tee-Object cmdlet。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯