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>
)
Đó 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
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? –
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