2013-01-09 32 views
8

Tôi có một tập lệnh mà tôi đang cố thêm chức năng của đường ống vào. Mặc dù vậy, tôi thấy hành vi kỳ lạ, nơi mà kịch bản dường như chỉ chạy với đối tượng cuối cùng trong đường ống. Ví dụ:Kịch bản dường như chỉ xử lý đối tượng cuối cùng từ đường ống

param(
    [parameter(ValueFromPipeline=$true)] 
    [string]$pipe 
) 

foreach ($n in $pipe) { 
    Write-Host "Read in " $n 
} 

Chết đơn giản, phải không? Sau đó tôi chạy 1..10 | .\test.ps1 và nó chỉ xuất ra một dòng Read in 10. Thêm vào sự phức tạp, kịch bản thực tế tôi muốn sử dụng trong này liên quan nhiều đến các thông số:

[CmdletBinding(DefaultParameterSetName="Alias")] 
param (
    [parameter(Position=0,ParameterSetName="Alias")] 
    [string]$Alias, 

    [parameter(ParameterSetName="File")] 
    [ValidateNotNullOrEmpty()] 
    [string]$File 

    <and so on> 
) 

Trả lời

11

Bạn cần phải quấn cơ thể chính của kịch bản với quá trình {}, điều này sau đó sẽ cho phép bạn xử lý mỗi mục trên đường ống. Khi quá trình sẽ được gọi cho mỗi mục, bạn thậm chí có thể làm đi với vòng lặp for.

Vì vậy, kịch bản của bạn sẽ đọc như sau:

param(
    [parameter(ValueFromPipeline=$true)] 
    [string]$pipe 
) 
process 
{ 
     Write-Host "Read in " $pipe 
} 

Bạn có thể đọc về chế biến đầu vào ở đây: Function Input Processing Methods

+0

Đó làm việc trong kịch bản thử nghiệm đơn giản của tôi ở trên, nhưng khi tôi đặt nó trong kịch bản của tôi, nó thực sự chạy Get-Process (và không thành công vì nó nhận được một khối script cho tham số Name) – ASTX813

+0

Bạn có thể đặt kịch bản đầy đủ của mình hoặc ít nhất là các phần nổi bật trong câu hỏi của bạn không? –

+0

Kể từ khi hộp phát triển của tôi từ chối cho phép tôi sao chép và dán, tôi sẽ không thể kéo nó ra. Tôi có thể nói với bạn rằng tôi đã thử thêm sự phức tạp hơn vào kịch bản thử nghiệm và tìm thấy trình kích hoạt. Khi tôi bổ sung 'hàm gì đó {Write-Host" hoạt động "}' trước khối lệnh {} trong kịch bản thử nghiệm, nó cũng làm như vậy. Nếu tôi bọc toàn bộ khối trong quá trình {}, mặc dù, kịch bản thử nghiệm hoạt động. – ASTX813

Các vấn đề liên quan