PowerShell
पॉवर्सशेल मॉड्यूल
खोज…
परिचय
PowerShell संस्करण 2.0 के साथ शुरू, डेवलपर्स PowerShell मॉड्यूल बना सकते हैं। PowerShell मॉड्यूल सामान्य कार्यक्षमता के एक सेट को एन्क्रिप्ट करता है। उदाहरण के लिए, विक्रेता-विशिष्ट PowerShell मॉड्यूल हैं जो विभिन्न क्लाउड सेवाओं का प्रबंधन करते हैं। जेनेरिक पॉवरशेल मॉड्यूल भी हैं जो सोशल मीडिया सेवाओं के साथ बातचीत करते हैं, और सामान्य प्रोग्रामिंग कार्य करते हैं, जैसे बेस 64 एन्कोडिंग, नामांकित पाइप्स के साथ काम करना, और बहुत कुछ।
मॉड्यूल कमांड एलियासेस, फ़ंक्शंस, वैरिएबल, क्लासेस और बहुत कुछ को उजागर कर सकते हैं।
एक मॉड्यूल घोषणापत्र बनाएँ
@{
RootModule = 'MyCoolModule.psm1'
ModuleVersion = '1.0'
CompatiblePSEditions = @('Core')
GUID = '6b42c995-67da-4139-be79-597a328056cc'
Author = 'Bob Schmob'
CompanyName = 'My Company'
Copyright = '(c) 2017 Administrator. All rights reserved.'
Description = 'It does cool stuff.'
FunctionsToExport = @()
CmdletsToExport = @()
VariablesToExport = @()
AliasesToExport = @()
DscResourcesToExport = @()
}
हर अच्छे PowerShell मॉड्यूल में एक मॉड्यूल प्रकट होता है। मॉड्यूल मेनिफ़ेस्ट में केवल PowerShell मॉड्यूल के बारे में मेटाडेटा होता है, और मॉड्यूल की वास्तविक सामग्री को परिभाषित नहीं करता है।
प्रकट फ़ाइल एक PowerShell स्क्रिप्ट फ़ाइल है, जिसमें एक .psd1
फ़ाइल एक्सटेंशन है, जिसमें एक हैशटेबल है। मैनिफ़ेस्ट में हैशटेबल में विशिष्ट कुंजियाँ होनी चाहिए, ताकि पॉवरशेल के लिए इसे पॉवरशेल मॉड्यूल फ़ाइल के रूप में सही ढंग से व्याख्या कर सके।
ऊपर दिया गया उदाहरण कोर हैशटेबल कुंजियों की एक सूची प्रदान करता है जो एक मॉड्यूल मेनिफेस्ट बनाते हैं, लेकिन कई अन्य हैं। New-ModuleManifest
कमांड आपको एक नया मॉड्यूल प्रकट कंकाल बनाने में मदद करता है।
सरल मॉड्यूल उदाहरण
function Add {
[CmdletBinding()]
param (
[int] $x
, [int] $y
)
return $x + $y
}
Export-ModuleMember -Function Add
यह एक सरल उदाहरण है कि PowerShell स्क्रिप्ट मॉड्यूल फ़ाइल क्या दिख सकती है। इस फ़ाइल को MyCoolModule.psm1
कहा MyCoolModule.psm1
, और इसे मॉड्यूल मेनिफ़ेस्ट (.psd1) फ़ाइल से संदर्भित किया जाता है। आप देखेंगे कि Export-ModuleMember
कमांड हमें यह निर्दिष्ट करने में सक्षम करती है कि हम मॉड्यूल में कौन से फ़ंक्शन "एक्सपोर्ट" करना चाहते हैं या मॉड्यूल के उपयोगकर्ता को एक्सपोज़ करना चाहते हैं। कुछ फ़ंक्शंस केवल आंतरिक होंगे, और उन्हें उजागर नहीं किया जाना चाहिए, इसलिए उन्हें कॉल से Export-ModuleMember
को छोड़ दिया जाएगा।
एक मॉड्यूल से एक चर निर्यात करना
$FirstName = 'Bob'
Export-ModuleMember -Variable FirstName
एक मॉड्यूल से एक चर निर्यात करने के लिए, आप -Variable
पैरामीटर के साथ Export-ModuleMember
कमांड का उपयोग करते हैं। हालाँकि, याद रखें कि यदि मॉड्यूल को मॉड्यूल मेनिफ़ेस्ट (.psd1) फ़ाइल में भी स्पष्ट रूप से निर्यात नहीं किया गया है, तो चर मॉड्यूल उपभोक्ता को दिखाई नहीं देगा। "गेटकीपर" की तरह मॉड्यूल के बारे में सोचें। यदि किसी फ़ंक्शन या चर को मॉड्यूल प्रकट होने की अनुमति नहीं है, तो यह मॉड्यूल उपभोक्ता को दिखाई नहीं देगा।
नोट: एक चर निर्यात करना एक वर्ग सार्वजनिक में एक क्षेत्र बनाने के समान है। यह उचित नहीं है। क्षेत्र को प्राप्त करने के लिए एक फ़ंक्शन को उजागर करना बेहतर होगा और फ़ील्ड को सेट करने के लिए एक फ़ंक्शन।
पॉवरशेल मॉड्यूल की संरचना करना
एकल .psm1
PowerShell स्क्रिप्ट मॉड्यूल फ़ाइल में अपने सभी फ़ंक्शंस को परिभाषित करने के बजाय, आप अपने फ़ंक्शन को अलग-अलग फ़ाइलों में तोड़ना चाह सकते हैं। फिर आप अपनी स्क्रिप्ट मॉड्यूल फ़ाइल से इन फ़ाइलों को डॉट-सोर्स कर सकते हैं, जो कि संक्षेप में, उनके साथ ऐसा व्यवहार करता है जैसे कि वे .psm1
फ़ाइल का ही हिस्सा थे।
इस मॉड्यूल निर्देशिका संरचना पर विचार करें:
\MyCoolModule
\Functions
Function1.ps1
Function2.ps1
Function3.ps1
MyCoolModule.psd1
MyCoolModule.psm1
अपनी MyCoolModule.psm1
फ़ाइल के अंदर, आप निम्नलिखित कोड डाल सकते हैं:
Get-ChildItem -Path $PSScriptRoot\Functions |
ForEach-Object -Process { . $PSItem.FullName }
यह .psm1
मॉड्यूल फ़ाइल में व्यक्तिगत फ़ंक्शन फ़ाइलों को डॉट-सोर्स करेगा।
मॉड्यूल का स्थान
PowerShell $ Env: PSModulepath में सूचीबद्ध निर्देशिकाओं में मॉड्यूल की तलाश करता है।
एक मॉड्यूल foo कहा जाता है, नामक फ़ोल्डर foo में साथ मिल जाएगा Import-Module foo
उस फ़ोल्डर में, PowerShell एक मॉड्यूल मेनिफ़ेस्ट (foo.psd1), एक मॉड्यूल फ़ाइल (foo.psm1), एक DLL (foo.dll) की तलाश करेगा।
मॉड्यूल सदस्य की दृश्यता
डिफ़ॉल्ट रूप से, मॉड्यूल में परिभाषित केवल फ़ंक्शन मॉड्यूल के बाहर दिखाई देते हैं। दूसरे शब्दों में, यदि आप एक मॉड्यूल में चर और उपनामों को परिभाषित करते हैं, तो वे मॉड्यूल के कोड को छोड़कर उपलब्ध नहीं होंगे।
इस व्यवहार को ओवरराइड करने के लिए, आप Export-ModuleMember
cmdlet का उपयोग कर सकते हैं। यह पैरामीटर कहा जाता है -Function
, -Variable
, और -Alias
जो कि वास्तव में आप निर्दिष्ट करने के लिए जो सदस्यों निर्यात किया जाता है की अनुमति देते हैं।
यह ध्यान रखना महत्वपूर्ण है कि यदि आप Export-ModuleMember
उपयोग करते हैं, तो केवल आपके द्वारा निर्दिष्ट आइटम ही दिखाई देंगे।