PowerShell中的含义是什么?

时间:2016-10-06 14:34:51

标签: powershell

我今天遇到过这个问题:

$tests = (Get-ChildItem . -Recurse -Name bin |% { Get-ChildItem $_ -Recurse -Filter *.Unit.Tests.dll } |% {  $($_.FullName) })
Write-Host ------------- TESTS -----------
Write-Host $tests
Write-Host -------------------------------
.\tools\xunit\xunit.console.exe $tests -xml test-report.unit.xml

我无法理解' |%'在那里。谁能解释一下它的用途呢?

2 个答案:

答案 0 :(得分:7)

%aliasthe ForEach-Object cmdlet

别名只是您可以引用cmdlet或函数的另一个名称。例如,dirlsgci都是Get-ChildItem的别名。

ForEach-Object为通过管道传递给它的每个项执行[ScriptBlock] ,因此将一个cmdlet的结果传递到ForEach-Object可让您运行一些代码针对每个项目。

在您的示例中,Get-ChildItem找到某个目录树中的所有bin,然后找到找到的每个Get-ChildItem用于查找匹配*.Unit.Tests.dll下面的所有文件,然后用于每个,将全名返回到管道(它被分配给{{ 1}}变量)。

答案 1 :(得分:1)

添加到@briantist的答案:

|是管道运算符。来自docs

  

每个管道运算符都将前一个命令的结果发送到下一个命令。

演示:

Get-ChildItem bin | % { Get-ChildItem $_  }

可以改写为:

Get-ChildItem bin | Foreach-Object { Get-ChildItem $_ }

without 使用管道,但使用foreach loop(与foreach command 不同!):

foreach ($item in (Get-ChildItem bin)) { Get-ChildItem $item }