PowerShell v2 में, निम्न पंक्ति:चुनिंदा ऑब्जेक्ट पावरशेल v3 में पाइपलाइन को कैसे रोकता है?
1..3| foreach { Write-Host "Value : $_"; $_ }| select -First 1
चाहेंगे प्रदर्शन:
Value : 1
1
Value : 2
Value : 3
के बाद से सभी तत्वों को नीचे पाइप लाइन धकेल दिया गया। हालांकि, v3 में उपरोक्त पंक्ति केवल प्रदर्शित करता है: इससे पहले कि 2 और 3 को Foreach-Object
भेजा जाता है
Value : 1
1
पाइप लाइन बंद कर दिया है (ध्यान दें: Select-Object
के लिए -Wait
स्विच सभी तत्वों foreach
ब्लॉक तक पहुँचने के लिए अनुमति देता है)।
कैसे Select-Object
पाइपलाइन रोक होता है, और अब मैं एक foreach
से या अपने खुद के समारोह से पाइप लाइन बंद कर सकते हैं?
संपादित करें: मैं जानता हूँ कि मैं एक करते हैं में एक पाइप लाइन लपेट कर सकते हैं ... जबकि पाश और पाइप लाइन से बाहर जारी है। मैंने यह भी पाया है v3 में मैं (यह वी 2 में काम नहीं करता) कुछ इस तरह कर सकते हैं कि:
function Start-Enumerate ($array) {
do{ $array } while($false)
}
Start-Enumerate (1..3)| foreach {if($_ -ge 2){break};$_}; 'V2 Will Not Get Here'
लेकिन Select-Object
इन तकनीकों इसलिए मुझे उम्मीद थी के लिए एक रास्ता था कि दोनों में से किसी की आवश्यकता नहीं है पाइपलाइन में एक बिंदु से पाइपलाइन को रोकें।
तो तुम StopUpstreamCommandsException लिए देख रहे हैं, लेकिन आप कर सकते हैं इसका उपयोग नहीं करते क्योंकि यह आंतरिक है। यहां इसके लिए एक एमएस कनेक्ट सुझाव है: https://connect.microsoft.com/PowerShell/feedback/details/768650/enable-users-to-stop-pipeline-making-stopupstreamcommandsexception-public –
धन्यवाद, @LarsTruijens मुझे इंगित करने के लिए उस से; मैंने इसे वोट दिया। – Rynant