2013-01-21 21 views
22

में मॉड्यूल में वेरिएबल्स मेरे पास एक मुख्य स्क्रिप्ट है, जहां कुछ स्थिरांक परिभाषित किए जाते हैं। मेरे पास सहायक कार्य शामिल करने के लिए एक मॉड्यूल (psm1) है। विवरण हैं:पावरशेल

मुख्य स्क्रिप्ट में, मैं एक वस्तु के रूप मॉड्यूल आयात किया है:

$cud2ADhleper = Import-Module -Force $cud2ADhelperModule -AsCustomObject 

मॉड्यूल में, मैं दो चर,

[string]$SQLServer = $null 

Function SetSQLServerAddr ([string] $name) 
{ 
    $SQLServer = $name 
} 
Function GetSQLServerAddr 
{ 
    return $SQLServer 
} 

मेरे समझ है कि है क्योंकि मैं मॉड्यूल से $SQLServer निर्यात नहीं कर रहा हूं, यह चर स्थानीय होना चाहिए, और मुझे इसे सेट/प्राप्त करने में सक्षम होना चाहिए।

यह अन्यथा पता चला है। SetSQLServerAddr ([string] $name) कहने के बाद, GetSQLServerAddr कॉलिंग $ null लौटाता है। मुझसे क्या छूट गया?

उत्तर

27
Function SetSQLServerAddr ([string] $name) 
{ 
    $SQLServer = $name 
} 
कि एक नया स्थानीय कि समारोह के दायरे में $SQLServer बनाता

आप मॉड्यूल में एक चर अपडेट करना चाहते हैं (.psm1) गुंजाइश तो आप उस इंगित करने के लिए नाम उपसर्ग की जरूरत है:

Function SetSQLServerAddr ([string] $name) 
{ 
    $script:SQLServer = $name 
} 

अधिक जानकारी के लिए पर स्कोप देख get-help about_scopes

+0

मैं पूरी तरह से देख रहा हूं और लगभग_स्कोप पढ़ा है लेकिन यह अभी भी मुझे स्पष्ट नहीं है कि मॉड्यूल में परिभाषित एक चर मॉड्यूल के भीतर किसी फ़ंक्शन में स्क्रिप्ट स्कोप का उपयोग करके सेट किया जा सकता है। स्क्रिप्ट स्कोप लगता है जैसे यह एक मॉड्यूल के संदर्भ में एक गलत नाम है और इसे मॉड्यूल स्कोप या ऐसा कुछ कहा जाना चाहिए। आपके उत्तर के लिए धन्यवाद! –

+1

@ChrisMagnuson मैं मानता हूं कि नाम बहुत अच्छा नहीं है, लेकिन यह समझ में आता है ("सामान्य" स्क्रिप्ट से प्रासंगिक अंतर यह है कि कॉलर पर लौटने के बाद मॉड्यूल स्थिति बनी रहती है)। – Richard