Powershell:从一个功能到另一个功能的管道值
问题描述:
我有两个功能之一输出一组目录 而且需要接收该设置并对其执行foreach,但是看起来第二个功能只接收其中一个目录(最后一个)。Powershell:从一个功能到另一个功能的管道值
我在做什么错。
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找到的最后一个目录。我需要第二个函数接受数组输入,因为我打算让它异步执行任务。
答
PetSerAl的评论是关注的。
我改变了第二功能如下
function Invoke-Build {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
[string[]]$directories
)
Begin { Write-Output "Starting" }
Process {
Set-Location $_
build
Set-Location ..
}
End { Write-Output "Done" }
+0
您也可以使用'process'块内的'foreach'来指定一个值数组(当不使用管道时) – Kiran
答
您需要在您的调用,生成功能的处理模块。
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/
使用'过程{...}'块。 – PetSerAl