2010-09-11 16 views

उत्तर

25

आप $MyInvocation जिसे आज निष्पादित किया जाता है के बारे में कुछ उपयोगी जानकारी शामिल कर सकते हैं।

function foo { 
    'This function is called {0}.' -f $MyInvocation.MyCommand 
} 
+0

काम करता है कि की परिभाषा =? मैंने अन्य $ myInvocation गुणों की कोशिश की लेकिन मुझे एक नहीं दिख रहा है। फ़ंक्शन foo {'इस फ़ंक्शन को {0} कहा जाता है।' -फ $ MyInvocation.MyCommand 'इस कॉलर को {0} कहा जाता है।' -फ $ MyInvocation।? } फ़ंक्शन CallFoo {foo} कॉलफू – alphadev

+8

यदि आप पावरशेल 2.0 पर हैं '(Get-PSCallStack) [1]। Comand'। –

+2

इसे एक अलग प्रश्न बनाएं, ताकि लोग इसे ढूंढ सकें। V1 में उत्तर 'gv -sc $ _ myinvocation' में है। Http://jtruher.spaces.live.com/blog/cns!7143DA6E51A2628D!172.entry –

2

Get-PSCallStack विकल्प केवल एक बार काम करने के लिए लगता है: जब स्क्रिप्ट के शरीर से एक समारोह बुला, पहली बार यह स्क्रिप्ट नाम को पुनः प्राप्त होगा, लेकिन दूसरी बार यह पाठ ''

पुनः प्राप्त करेगा
+0

मुझे दोहराने योग्य लगता है, जब भी मैं इसे कॉल करता हूं, कॉल स्टैक लौटाता हूं। मैं कॉलिंग फ़ंक्शन का नाम ढूंढना चाहता था और Get-PSCallStack का उपयोग करना ऐसा करने का तरीका प्रतीत होता है; जय बाजूज़ी के लिंक में विधि ने मुझे कॉलिंग फ़ंक्शन नाम नहीं दिया। किसी और के लिए, मैंने 'Get-PSCallStack | का उपयोग किया कॉलिंग फ़ंक्शन का नाम प्राप्त करने के लिए ऑब्जेक्ट फ़ंक्शननाम-स्कीप 1-प्रथम 1' चुनें। यदि वर्तमान फ़ंक्शन को शीर्ष स्तरीय स्क्रिप्ट से बुलाया जाता है तो यह '' वापस आ जाएगा। –

4

जब आप किसी फ़ंक्शन में हों तो आप स्वचालित चर $ PSCmdLet तक पहुंच सकते हैं।

यह एक बेहद उपयोगी चर है जो वर्तमान में निष्पादित cmdlet के बारे में बहुत सारी जानकारी रखता है।

हमारे परिदृश्य में हम कुछ रिकर्सन के लिए वर्तमान फ़ंक्शन का नाम और परिभाषा चाहते थे। $ MyInvocation शून्य था क्योंकि फ़ंक्शन PowerShell मॉड्यूल के भीतर था।

हालांकि, PSCmdLet ऑब्जेक्ट पर "MyInvocation" संपत्ति है जिसमें सभी आवश्यक जानकारी शामिल है और हमारे परिदृश्य को चलाने की अनुमति है।

उदा। धन्यवाद किसी भी विचार कैसे बुला समारोह नाम पाने के लिए - $ PSCmdlet.MyInvocation.MyCommand.Name = समारोह $ PSCmdlet.MyInvocation.MyCommand.Definition के नाम समारोह

+1

'$ PSCmdlet' केवल तभी काम करता है जब फ़ंक्शन में स्पष्ट '[सीएमडीलेट बाइंडिंग()] विशेषता है। – jpmc26

+0

[about_automatic_variables] (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_automatic_variables?view=powershell-5।1) $ PsCmdlet के लिए प्रविष्टि कहती है 'उस ऑब्जेक्ट में शामिल है जो cmdlet या उन्नत फ़ंक्शन को चला रहा है' का प्रतिनिधित्व करता है। तो यह केवल उन्नत कार्यों के साथ काम करता है, जिसमें CmdletBindingAttribute है, सामान्य कार्य नहीं। –

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

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