Powershell:将值从一个函数传递到另一个函数
我有两个函数,一个输出一组目录 需要接收该集合并对其执行foreach,但是第二个函数似乎只接收其中一个目录(最后一个) 我做错了什么Powershell:将值从一个函数传递到另一个函数,shell,powershell,pipeline,Shell,Powershell,Pipeline,我有两个函数,一个输出一组目录 需要接收该集合并对其执行foreach,但是第二个函数似乎只接收其中一个目录(最后一个) 我做错了什么 Get-Directories { return Get-ChildItem | Where-Object { $_.PSIsContainer -eq $True } } function Invoke-Build { [CmdletBinding()] Param( [Parameter(Mandatory=$True,Val
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目录找到的最后一个目录。我需要第二个函数来接受数组输入,因为我计划让它异步工作。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" }
您需要在调用构建函数中包含一个进程块
function Invoke-Build
{
[CmdletBinding()]
Param
(
[Parameter(Mandatory = $True,
ValueFromPipeline = $True,
ValueFromPipelineByPropertyName = $True)]
[string[]]$directories
)
PROCESS
{
Write-Output $directories
}
}
如果您这样调用函数:
"dir1", "dir2", "dir3" | Invoke-Build
该函数将一次遍历一个目录
有关实现管道支持的更多信息,请参见此处:使用
进程{…}
块。您还可以在进程
块内使用foreach
来指定值数组(不使用管道时)