2009-09-10 15 views
28

से एक विशिष्ट PowerShell फ़ंक्शन को कॉल करना मेरे पास एक PowerShell स्क्रिप्ट है जिसमें कई फ़ंक्शन हैं। मैं कमांड लाइन से एक विशिष्ट फ़ंक्शन कैसे शुरू करूं?कमांड लाइन

यह काम नहीं करता:

powershell -File script.ps1 -Command My-Func 

उत्तर

63

आप होगा आम तौर पर "डॉट" दायरे में स्क्रिप्ट (वैश्विक, एक और स्क्रिप्ट, एक scriptblock के भीतर)। एक स्क्रिप्ट को डॉट करने से एक नया, घोंसला वाला स्कोप बनाये बिना स्क्रिप्ट को उस स्कोप में लोड और निष्पादित किया जाएगा। कार्यों के साथ, यह लाभ है कि स्क्रिप्ट के निष्पादन के बाद वे चारों ओर चिपकते हैं।

. .\script.ps1 
My-Func 

बस हो:

powershell -command "& { . <path>\script1.ps1; My-Func }" 

तुम सिर्फ तो ऐसा करने के अपने वर्तमान PowerShell सत्र से समारोह निष्पादित करने के लिए चाहते हैं: आप टोमेर ऑर्र सिवाय इसके कि आप स्क्रिप्ट जैसे डॉट करने की आवश्यकता होगी क्या पता चलता है कर सकता है जानते हैं कि किसी भी स्क्रिप्ट में फ़ंक्शन में निष्पादित नहीं किया जाएगा और कोई भी स्क्रिप्ट चर वैश्विक चर बन जाएगा।

+0

+1, दूसरी कोड का टुकड़ा मैं सिर्फ क्या जरूरत है, आईएसई –

+1

से एक स्क्रिप्ट फ़ाइल दूसरा कोड स्निपेट में अलग कार्यों का एक सरल डिबग करने के लिए, आप 'और साथ कोड घेर कर सकते था {...} 'के रूप में' और {। । \ Script1.ps1; स्कोप प्रदूषण से बचने के लिए 'My-Func}'। –

+0

यदि आपके पास फ़ंक्शन पर पैरामीटर हैं, तो उन्हें फ़ंक्शन नाम के बाद डालें। powerhell -command "और {।" सी: \ script.ps1 "; MyMethod" arg1 "" arg2 "}" – HockeyJ

2

शायद कुछ

तरह
powershell -command "& { script1.ps; My-Func }" 
0

निर्देश नीचे दिए गए त्रुटि संदेश को फेंकता है। केथ हिल ने सुझाव दिया कि फ़ाइल नाम के नाम से पहले इसे स्मृति में लोड करने के लिए डॉट की आवश्यकता है।

MyFunction: The term 'MyFunction' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.