让我们看看简短的PS片段:
Write-Output @(1,2,3)
Write-Output @(1,2,3).Count
Get-Process|Write-Output
Write-Output (Get-Process)
$p=7890;Write-Output "Var. is $p"
Write-Output "ABCD78".Length
Function Get-StoppedService {
Param([string]$Computername = $env:computername)
$s = Get-Service -ComputerName $Computername
$stopped = $s | where {$_.Status -eq 'Stopped'}
Write-Output $Stopped
}
Get-StoppedService
在上面的所有片段中,我可以删除字符串写入输出(带有尾随空格,如果有的话),并且具有完全相同的功能。 问题是:你知道我们不能放弃写输出的例子吗?当然,如果您对Write-Output的参数 -NoEnumerate 感兴趣,则无法消除cmdlet本身,因此我们假设我们不希望/需要 -NoEnumerate 。在这种情况下 - 你有例子吗?
答案 0 :(得分:3)
MSDN本身具有以下statement
此cmdlet通常用于脚本中以显示字符串和其他字符串 控制台上的对象。但是,因为默认行为是 显示管道末端的对象,通常不是 必须使用cmdlet。例如,get-process |写输出 相当于get-process。
可能有用的一种情况是,当你构建一个具有未知阶段的管道时,即通过参数等给你的阶段,用户可以为你提供任何cmdlet,例如Tee-Object
。如果用户不希望发生任何特殊情况,他可以简单地将Write-Output
作为一种"传递"阶段(当然你也可以自己轻松实现)
答案 1 :(得分:1)
通常情况下,PetSerAl's简洁的例子(通过对问题的评论,在这种情况下)导致顿悟:
虽然一般不 (请参阅DAXaholic's helpful answer;您Write-Output
甚至不需要-NoEnumerate
,因为可以使用一元数组构造运算符,
)进行模拟, Write-Output
可以提供语法糖 :
(Write-Output a b c d e | Measure-Object).Count
会产生5
,这表明Write-Output
接受任意数量的单个参数,这些参数通过管道发送到屏幕上之一。
因此,Write-Output
可以简化将一组项目发送到输出流,而不是要求引用它们,因为,作为一个cmdlet,Write-Output
& #39; s参数在argument mode中解析:
因此,而不是"嘈杂"数组文字,如下所示(需要引用元素并用,
分隔):
"a", "b", "c", "d", "e"
你可以简单地写(尽管以牺牲性能为代价):
Write-Output a b c d e