Powershell:从一个函数到另一个函数的管道值

时间:2016-01-22 09:01:13

标签: shell powershell pipeline

我有两个函数,它们输出一组目录 并且需要接收该组并对其进行操作,但是第二个函数似乎只接收其中一个目录(最后一个)。

我做错了什么。

Get-Directories {
    return Get-ChildItem | Where-Object { $_.PSIsContainer -eq $True }
}
function Invoke-Build {
    [CmdletBinding()]
    Param(
    [Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
    [string[]]$directories
)
Write-Output $dir
foreach ($dir in $directories) {
    Set-Location $dir
    Build
    Set-Location ..
}

Get-Directories | Invoke-Build

输出只是Get-Directories找到的最后一个目录。我需要第二个函数接受数组输入,因为我打算让它以异步方式执行。

2 个答案:

答案 0 :(得分:1)

您需要在Invoke-Build函数中包含PROCESS块。

function Invoke-Build 
{
  [CmdletBinding()]
  Param
  (
    [Parameter(Mandatory = $True,
               ValueFromPipeline = $True,
               ValueFromPipelineByPropertyName = $True)]
    [string[]]$directories
  )

  PROCESS 
  {
    Write-Output $directories
  }
}

如果你这样调用这个函数:

"dir1", "dir2", "dir3" | Invoke-Build

该函数将一次迭代一个目录。

有关实施管道支持的更多信息,请访问:http://learn-powershell.net/2013/05/07/tips-on-implementing-pipeline-support/

答案 1 :(得分:0)

PetSerAl的评论很明显。

我改变了第二个功能如下

<?php
    include_once('simple_html_dom.php');
    $url = 'http://example.com';
    $html = file_get_html($url);
    $titles = $html->find('.titles');
    $heading = $titles->find('h2')[0];
    $link = $heading->find('a')[0];
    echo $link; 
    //result: <a href="#">First Title</a>
?>