Trong PowerShell v2, dòng sau:Chọn đối tượng dừng đường ống trong PowerShell v3 như thế nào?
1..3| foreach { Write-Host "Value : $_"; $_ }| select -First 1
sẽ hiển thị:
Value : 1
1
Value : 2
Value : 3
Vì tất cả các yếu tố này được đẩy xuống các đường ống dẫn. Tuy nhiên, trong v3 dòng trên chỉ hiển thị:
Value : 1
1
Các đường ống được dừng lại trước 2 và 3 được gửi đến Foreach-Object
(Lưu ý: -Wait
switch cho Select-Object
cho phép tất cả các yếu tố để đạt được khối foreach
).
Làm cách nào để Select-Object
dừng kênh và bây giờ tôi có thể dừng đường ống từ foreach
hoặc từ chức năng của riêng tôi không?
Chỉnh sửa: Tôi biết tôi có thể quấn đường ống trong vòng lặp ... trong khi và tiếp tục thoát ra khỏi đường ống. Tôi cũng đã phát hiện ra rằng trong v3 tôi có thể làm một cái gì đó như thế này (nó không hoạt động trong v2):
function Start-Enumerate ($array) {
do{ $array } while($false)
}
Start-Enumerate (1..3)| foreach {if($_ -ge 2){break};$_}; 'V2 Will Not Get Here'
Nhưng Select-Object
không yêu cầu một trong những kỹ thuật này vì vậy tôi đã hy vọng rằng có một cách để dừng đường ống từ một điểm duy nhất trong đường ống.
Vì vậy, bạn đang tìm kiếm StopUpstreamCommandsException, nhưng bạn có thể không sử dụng nó vì nó là nội bộ. Đây là gợi ý kết nối MS cho nó: https://connect.microsoft.com/PowerShell/feedback/details/768650/enable-users-to-stop-pipeline-making-stopupstreamcommandsexception-public –
Cảm ơn, @LarsTruijens đã chỉ cho tôi cho điều đó; Tôi đã bình chọn nó. – Rynant