2011-04-15 17 views
6

मेरे पास एकाधिक कार्यों के साथ एक मॉड्यूल है।मॉड्यूल मैनिफेस्ट के साथ PowerShell मॉड्यूल उपनाम निर्यात करने के लिए कैसे?

चूंकि मैंने उन्हें एक पावरशेल-मार्ग में नामित किया है, इसलिए मैं उनका नाम बदलना चाहता हूं। लेकिन जैसा कि मॉड्यूल पहले से उपयोग में है, मैं पुराने फ़ंक्शन नाम रखना चाहता हूं।

इसे प्राप्त करने का सबसे अच्छा तरीका उपनाम का उपयोग करना प्रतीत होता है।

AliasesToExport = '*' 

तो मैं New-Alias -Name test -Value oldFunctionName साथ मॉड्यूल में एक उपनाम बनाया: मैं पहले से ही एक मॉड्यूल प्रकट जिसमें कहा गया है।

फ़ंक्शन सामान्य रूप से आयात किए गए थे, लेकिन उपनाम वहां नहीं था।

मुझे पता है कि मैं मॉड्यूल में निर्यात-मॉड्यूलमेम्बर का उपयोग कर सकता हूं। लेकिन मेरे पास एक मैनिफेस्ट है जो पहले से ही इसका ख्याल रखना चाहिए।

क्यों उपनाम प्रकट माध्यम से निर्यात नहीं कर रहे हैं:

तो यहाँ अंत में मेरे सवालों का कर रहे हैं?

क्या फ़ंक्शन में कोई विशेष स्थान है, जहां मैं उपनाम को परिभाषित कर सकता हूं या परिभाषित कर सकता हूं? या क्या मुझे नई-एलियास cmdlet कहीं विशेष का उपयोग करना है?

मैं पैरामीटर उपनाम की तरह कुछ के बारे में सोच रहा था:

[parameter(Mandatory=$true, Position=0)][Alias("name","path")][String]$filename 

लेकिन कार्यों के लिए बजाय।

उत्तर

5

ऐसा समाधान प्रतीत नहीं होता है जिसे मैं ढूंढ रहा हूं।

तो मैं मैं सिर्फ पैरामीटर "उर्फ" का इस्तेमाल किया निर्यात-ModuleMember

Export-ModuleMember -Function * -Alias * 

उपयोग करने के लिए सबसे पहले के रूप में कार्य सही ढंग से प्रकट (FunctionsToExport = "*") के लिए धन्यवाद निर्यात किया गया था लेकिन फिर बस उपनाम निर्यात किया गया था।

तो सुनिश्चित करें कि आप निर्यात-मॉड्यूलमेम्बर cmdlet के साथ निर्यात किए जाने वाले सभी चीज़ों को निर्यात करते हैं।

3

नई-एलियास कमांड में -स्कोप ग्लोबल जोड़ना चाल चल रहा है।

New-Alias -Name test -Value oldFunctionName -Scope Global 

जबकि मैं यह कोशिश कर रहा था, मैंने कुछ ऐसा देखा जो मुझे आश्चर्यचकित करता था। मेरे पास एक मॉड्यूल में एक फ़ंक्शन है जिसका उद्देश्य उपनाम बनाना है। मैं यह देखकर आश्चर्यचकित था कि जब मैं इस फ़ंक्शन का उपयोग करता हूं (मॉड्यूल आयात किए जाने के बाद) यह बनाता है कि उपनाम मॉड्यूल से जुड़े होते हैं। यदि मैं मॉड्यूल को हटा देता हूं, तो इस फ़ंक्शन के साथ बनाए गए सभी उपनाम भी चले जाते हैं।

+2

कृपया मॉड्यूल के लिए ग्लोबल्स घोषित न करें। :) – JasonMArcher

+0

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

2

आप को देखो, तो:

get-help New-ModuleManifest -full 

-AliasesToExport के लिए आप निम्न देख सकते हैं:

-AliasesToExport <string[]> 
Specifies the aliases that the module exports. Wildcards are permitted. 

You can use this parameter to restrict the aliases that are exported by the module. It can remove aliases from the list of exported aliases, but it cannot add aliases to the list. 

If you omit this parameter, New-ModuleManifest creates an AliasesToExport key with a value of * (all), meaning that all aliases that are exported by the module are exported by the manifest. 

मैं गलत हो सकता है लेकिन मेरी समझ में -AliasesToExport एक निर्यात उर्फ ​​प्रतिबंधित करने के लिए इस्तेमाल किया जा सकता है, लेकिन वाक्य "नया-मॉड्यूलमैनिफेस्ट * (सभी) के मान के साथ एक AliasesToExport कुंजी बनाता है, जिसका अर्थ है कि मॉड्यूल द्वारा निर्यात किए गए सभी उपनाम मैनिफेस्ट द्वारा निर्यात किए जाते हैं" मेरे लिए मतलब है आपको अपने मॉड्यूल में उपनाम निर्यात करना होगा।

+0

आपको उपनामों के लिए निर्यात-मॉड्यूलमेम्बर का भी उपयोग करना होगा। – JasonMArcher

+0

वही सहायता सूचना "FunctionsToExport" में दी गई है और मुझे स्पष्ट रूप से कार्यों को निर्यात करने की आवश्यकता नहीं थी। – Tom

+1

ऐसा इसलिए है क्योंकि चर डिफ़ॉल्ट रूप से निर्यात किए जाते हैं, चर और उपनामों के विपरीत। यह निर्यात-मॉड्यूलमेम्बर दस्तावेज़ में पुष्टि की गई है। इसके अलावा, न्यू-मॉड्यूलमेनफेस्ट के लिए सहायता बताती है कि यह एलियस को अपने आप निर्यात नहीं कर सकता है, बल्कि मॉड्यूल द्वारा निर्यात किए गए लोगों को केवल प्रतिबंधित कर सकता है: '" मॉड्यूल निर्यात के उपनाम निर्दिष्ट करता है। वाइल्डकार्ड की अनुमति है। आप मॉड्यूल द्वारा निर्यात किए गए उपनामों को प्रतिबंधित करने के लिए इस पैरामीटर का उपयोग कर सकते हैं। यह निर्यात किए गए उपनामों की सूची से उपनाम हटा सकता है, लेकिन यह सूची में उपनाम नहीं जोड़ सकता है। " –