我有两个函数,它们输出一组目录 并且需要接收该组并对其进行操作,但是第二个函数似乎只接收其中一个目录(最后一个)。
我做错了什么。
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找到的最后一个目录。我需要第二个函数接受数组输入,因为我打算让它以异步方式执行。
答案 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>
?>