2013-01-09 12 views
8

से अंतिम ऑब्जेक्ट को संसाधित करने लगती है मेरे पास एक स्क्रिप्ट है जिसे मैं पाइपलाइन कार्यक्षमता जोड़ने की कोशिश कर रहा हूं। मैं अजीब व्यवहार देख रहा हूं, हालांकि, जहां स्क्रिप्ट केवल पाइपलाइन में अंतिम वस्तु के खिलाफ चलती है। उदाहरण के लिएस्क्रिप्ट केवल पाइपलाइन

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

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

मृत सरल, नहीं? मैं फिर 1..10 | .\test.ps1 चलाता हूं और यह केवल एक पंक्ति Read in 10 आउटपुट करता है। जटिलता को जोड़ना, वास्तविक स्क्रिप्ट मैं इस में उपयोग करना चाहते हैं मानकों के लिए और अधिक है:

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

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

    <and so on> 
) 

उत्तर

11

आप प्रक्रिया {} के साथ स्क्रिप्ट के मुख्य शरीर रैप करने के लिए की जरूरत है, तो आप प्रत्येक कार्रवाई करने के लिए अनुमति देगा पाइपलाइन पर आइटम। चूंकि प्रत्येक आइटम के लिए प्रक्रिया को बुलाया जाएगा, आप लूप के साथ भी दूर कर सकते हैं।

तो अपनी स्क्रिप्ट के रूप में पढ़ा होगा इस प्रकार है:

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

आप इनपुट प्रसंस्करण के बारे में यहाँ पढ़ सकते हैं: Function Input Processing Methods

+0

कि ऊपर मेरी साधारण परीक्षण लिपि में काम किया, लेकिन जब मैं यह मेरी स्क्रिप्ट में डाल दिया, यह वास्तव में गेट-प्रोसेस चलाता है (और विफल रहता है क्योंकि इसे नाम पैरामीटर के लिए स्क्रिप्ट ब्लॉक प्राप्त हो रहा है) – ASTX813

+0

क्या आप अपनी पूरी स्क्रिप्ट या कम से कम अपने प्रश्न में मुख्य भाग डाल सकते हैं? –

+0

चूंकि मेरा विकास बॉक्स मुझे कॉपी और पेस्ट करने की अनुमति देने से इंकार कर रहा है, इसलिए मैं इसे खींचने में सक्षम नहीं हूं। मैं आपको बता सकता हूं कि मैंने परीक्षण स्क्रिप्ट में और जटिलता जोड़ने की कोशिश की और ट्रिगर पाया। जब मैंने टेस्ट स्क्रिप्ट में प्रक्रिया {} ब्लॉक से पहले कुछ 'लिखें-होस्ट "फ़ंक्शनिंग"} 'फ़ंक्शन जोड़ा, तो यह वही काम करता था। यदि मैं पूरे ब्लॉक को प्रक्रिया में लपेटता हूं {}, हालांकि, परीक्षण स्क्रिप्ट काम करता है। – ASTX813

संबंधित मुद्दे