例如:
get-service | export-csv C:\services.csv
到底发生了什么?
输出对象Get-Service
成为Stop-Service
接受管道输入的参数的输入.
在stop-service的情况下,此参数是-InputObject
,它接受一个ServiceController
或多个对象(ServiceController[]
).由于Get-Service
输出了对象类型,您可以使用管道将其传递给Stop-Service
.如果存在ServiceController
对象集合,Stop-Service
则会在称为流式传输的过程中为集合中的每个项目调用一次.
当项目在管道上流式传输时,它们会在可用时立即继续运行.如果您想等到集合完成后才能通过它,您可以将输入包装在一组括号中.
查找接受管道输入的参数
如果您曾经Get-Help
用于查找特定cmdlet,可以滚动到参数部分以查看哪个参数接受管道输入:
PS C:\> Get-Help Stop-Service -full ... -InputObject <ServiceController[]> Required? true Position? 0 Accept pipeline input? true (ByValue) Parameter set name InputObject Aliases None Dynamic? false -Name <string[]> Required? true Position? 0 Accept pipeline input? true (ByValue, ByPropertyName) Parameter set name Default Aliases ServiceName Dynamic? false
因此,通过查看该cmdlet的文档,我们可以看到您可以使用ServiceController对象的集合甚至服务的字符串名称作为管道的输入.以下是使用相关cmdlet Get-Service的示例:
#Using a string PS C:\Users\2.34> "MySQL" | Get-Service Status Name DisplayName ------ ---- ----------- Running MySQL MySQL #Using a ServiceController object PS C:\> Get-Service "MySQL" | Get-Service Status Name DisplayName ------ ---- ----------- Running MySQL MySQL
更多阅读
如果您有兴趣通过属性名称了解管道输入,那么这里有一篇很棒的TechNet文章.你可以在这里找到about_Pipelines
文档.