将管道中的目录作为Powershell命名参数传递

时间:2013-05-13 12:45:30

标签: powershell parameters pipeline

我尝试编写一个Powershell脚本,它接受来自管道的目录作为命名参数。我的参数声明看起来像

param([Parameter(Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelinebyPropertyName=$true)] [System.IO.DirectoryInfo[]] $PsPath)

我的问题是电话

gci c:\ -Directory | MyScript

只导致gci结果的最后一个元素在输入数组中。这有什么不对?

提前致谢, 克里斯托弗

1 个答案:

答案 0 :(得分:5)

您需要将执行代码包装到PROCESS块中:

function MyScript {
    param(
        [Parameter(Mandatory=$true, 
                   ValueFromPipeline=$true, 
                   ValueFromPipelinebyPropertyName=$true)] 
        [System.IO.DirectoryInfo[]] $PsPath
    )

    PROCESS {
        $PsPath
    }
}

gci c:\ -Directory | MyScript
唐·琼斯有一个很好的BEGIN,PROCESS,& END阻止此处:http://technet.microsoft.com/en-us/magazine/hh413265.aspx