2009-04-18 10 views
21

मैंने अभी एक पावरहेल फ़ंक्शन बनाया है और इसे एक ps1 फ़ाइल में सहेजा है। हालांकि, जब मैं इसे पावरहेल के भीतर से निष्पादित करने का प्रयास करता हूं, तो यह नहीं चलेगा।पावरहेल ps1 फ़ाइल "को cmdlet, फ़ंक्शन, ऑपरेट करने योग्य प्रोग्राम या स्क्रिप्ट फ़ाइल के रूप में पहचाना नहीं गया है।"

मैं allready यह आदेश डालकर अहस्ताक्षरित कोड चलाने के लिए सेटिंग्स को बदल दिया है:

set-executionpolicy remotesigned 

समारोह यह है:

Function listAllPaths([string]$fromFolder, [string]$filter, [string]$printfile){ 
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile 
} 

क्या यह करता है एक textfile बनाने है जिसमें सभी एक निश्चित फ़ाइल के पथ सूचीबद्ध हैं।
मैंने इसे सी: \ के तहत सीधे रखा है और फ़ंक्शन के समान फ़ाइल सूची AllPaths नाम दिया है।

जब मैं Powershell अंदर निम्न आदेश दर्ज करें:

PS> listAllPaths.ps1 c:\ *.pdf testingPDF.txt 

मैं एक त्रुटि कह मिलती है:

शब्द 'listAllPaths.ps1' एक cmdlet, समारोह के रूप में मान्यता प्राप्त नहीं है, ऑपरेट करने योग्य प्रोग्राम, या स्क्रिप्ट फ़ाइल। शब्द सत्यापित करें और पुनः प्रयास करें।

मैं कई बातें की कोशिश की है और मैं ईमानदारी से यह कैसे काम करने के लिए प्राप्त करने के लिए पता नहीं है? मुझे उम्मीद है कि दिए गए पथ पर फ़ाइल बनाने के लिए, c: \ इस उदाहरण में। उस फ़ाइल का नाम परीक्षण PDF.txt है और सामग्री जेनरेट की जा रही है।

क्या कोई मुझे बता सकता है कि मैं यहां क्या भूल रहा हूं।

और नहीं, Google सब कुछ जवाब नहीं देता है। कोशिश की कि पहले से ही एक। मैं नहीं आऊंगा और यहां पूछूंगा कि अगर मैंने पहले से ही ऑनलाइन सर्च इंजनों की कोशिश नहीं की है।

उत्तर

10

यह कई प्लेटफार्मों में एक सामान्य त्रुटि है जहां आपके पर्यावरण पथ में आपकी वर्तमान निर्देशिका शामिल नहीं है। इसलिए जब आप अपनी स्क्रिप्ट (या कमांड या प्रोग्राम इत्यादि) निष्पादित करते हैं, तो आपका रनटाइम वातावरण आपकी वर्तमान/कार्यशील निर्देशिका को छोड़कर हर जगह दिखता है।

PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt 

संपादित करें का प्रयास करें: अपनी टिप्पणी पढ़ने के बाद, मैं आप इस कोशिश का सुझाव देने के लिए जा रहा हूँ। मैंने वास्तव में आपकी पीएस लिपि के तर्क को सत्यापित नहीं किया है। मैं केवल अपनी स्क्रिप्ट को पहले निष्पादित करने की कोशिश कर रहा हूं।

अपनी स्क्रिप्ट को नीचे के रूप में संपादित करने का प्रयास करें, और ऊपर के रूप में निष्पादित करें।

Function listAllPaths([string]$fromFolder, [string]$filter, [string]$printfile){ 
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile 
} 

listAllPaths 
+0

धन्यवाद, लेकिन यह काम नहीं किया। मैंने उस आदेश में प्रवेश किया और यह बस उस पर कूद गया। कोई त्रुटि रिपोर्ट नहीं की गई, मेरे लिए कमांड दर्ज करने के लिए पावरहेल में बस एक नई पंक्ति। – KdgDev

+0

ठीक है, तो इसका मतलब है कि पीएस स्क्रिप्ट वास्तव में निष्पादित है, लेकिन कोई आउटपुट वापस नहीं किया जाता है। इसे सत्यापित करने के लिए कुछ प्रिंट स्टेटमेंट्स डालने का प्रयास करें। अब क्या आप वाकई एक और छोटी गलती नहीं कर रहे हैं? मैं देखता हूं कि आप अपना कोड फ़ंक्शन में डालते हैं, लेकिन क्या आप वास्तव में अपनी स्क्रिप्ट में फ़ंक्शन को कॉल कर रहे हैं? – Chaitan

+0

मेरी स्क्रिप्ट में फ़ंक्शन को कॉल करना? मैं पावरहेल के साथ अनुभव नहीं कर रहा हूं, जो मैंने यहां पोस्ट किया है वह मेरी लिपि की सटीक सामग्री है, और नहीं, कम नहीं। – KdgDev

7

मैं आधार यहाँ बंद हो सकता है, लेकिन यह अपनी स्क्रिप्ट यह क्रियान्वित करने की तुलना में एक समारोह को परिभाषित किया जाता है कि है, बल्कि? शायद आपको स्क्रिप्ट "स्रोत" की आवश्यकता है:

. .\listallpaths.ps1 

... ताकि अब आपके "listallpaths" फ़ंक्शन को परिभाषित किया जा सके।

+0

हाँ, अब मैं बस फ़ंक्शन टाइप कर सकता हूं और पैरामीटर दे सकता हूं। फिर भी, मान लीजिए कि मैं बहुत सारे स्थानांतरित करता हूं और विभिन्न पीसी/लैपटॉप के साथ काम करता हूं। यहां तक ​​कि यदि उनमें से सभी को शक्तियां हैं, तो मुझे हर बार फ़ंक्शन को फिर से परिभाषित करना होगा। मैं वास्तव में उस मामले में क्या करना चाहता हूं बस ps1 फ़ाइल को कॉल करें और इसे तर्क दें और यह कार्य करें। – KdgDev

+0

मैट - आप सही रास्ते पर हैं .. मैंने अभी रनटाइम व्यवहार WebDevHobo ढूंढने के लिए स्क्रिप्ट में संशोधन सूचीबद्ध किया है। –

4

आप परम के साथ "समारोह listallpaths" की जगह और आसपास के {} इस तरह ..

param([string]$fromFolder, [string]$filter, [string]$printfile) 
Get-ChildItem -Path $fromFolder -Include $filter -Recurse -Force -Name > $printfile 

से छुटकारा पाने के लिए आप एक स्क्रिप्ट फ़ाइल है कि आप के रूप में आवश्यक कॉल कर सकते हैं होगा।

PS> .\listAllPaths.ps1 c:\ *.pdf testingPDF.txt 

के रूप में मैट के लिए, समारोह की घोषणा के द्वारा, जब आप स्क्रिप्ट कहा जाता है, यह समारोह और फिर बाहर निकल बन जाएगा alluded। एक PowerShell स्क्रिप्ट मूल रूप से एक फ़ाइल में संग्रहीत एक फ़ंक्शन है (आसपास के ब्रेसिज़ के बिना .. वे निहित हैं), जहां फ़ंक्शन स्वयं स्मृति में संग्रहीत किया जाएगा।

+0

+1 - ऐसा करने के लिए यह एक बहुत साफ तरीका प्रतीत होता है। –

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

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