get-date | Write-Host($ _)在概念上有什么问题

时间:2014-09-10 13:14:51

标签: powershell

我试图了解Powershell,但发现某些事情并不那么直观。我理解的是,在管道中传递对象,而不是传统的文本。并且$ _指的是管道中的当前对象。那么,为什么以下不起作用:

get-date|Write-Host "$_"

错误消息是:

Write-Host:输入对象不能绑定到命令的任何参数,因为该命令不接受管道输入或输入及其属性不匹配 h任何采用管道输入的参数。 在行:1 char:10 + get-date | Write-Host $ _ + ~~~~~~~~~~~~~     + CategoryInfo:InvalidArgument:(10-9-2014 15:17:00:PSObject)[Write-Host],ParameterBindingException     + FullyQualifiedErrorId:InputObjectNotBound,Microsoft.PowerShell.Commands.WriteHostCommand

1 个答案:

答案 0 :(得分:8)

$_是管道中的当前单个项目。要编写管道中的每个项目,您需要编写

get-data | foreach { Write-Host $_ }

或以简短形式

get-data |% { Write-Host $_ }

从概念上讲,Foreach是一个cmdlet,它接收函数参数,管道输入并在管道的每个项目上应用该函数。你不能只用$_编写代码 - 你需要有一个函数明确声明它同意接收管道输入