5

परिदृश्यPowerShell निर्भरता प्रबंधन

मेरे PowerShell फ़ोल्डर उपयोगिता स्क्रिप्ट का एक पुस्तकालय में शामिल है। मैंने इसे अपने काम और घर कंप्यूटर के बीच गिटहब के साथ साझा किया है और संस्करण नियंत्रित किया है। काम पर अब मेरे पास कई परियोजनाएं हैं जहां मैं अपनी स्क्रिप्ट लाइब्रेरी का लाभ लेना चाहता हूं।

समस्या

जब मैं एक उपयोगिता स्क्रिप्ट अद्यतन करते हैं, मैं सब काम परियोजनाओं जहां यह प्रयोग किया जाता है करने के लिए मैन्युअल रूप से इसे कॉपी करने के लिए नहीं करना चाहती।

संभावित समाधान

  1. (सरल)

    एक PowerShell समारोह लिखें प्रत्येक स्क्रिप्ट परियोजना के लिए काम निर्देशिका के अंतर्गत एक 'निर्भरता \ स्क्रिप्ट' निर्देशिका के लिए मेरी पूरी स्क्रिप्ट पुस्तकालय कॉपी करने के लिए । चूंकि मेरी स्क्रिप्ट लाइब्रेरी बढ़ती है, इसलिए दूसरों के लिए स्क्रिप्ट प्रोजेक्ट के लिए प्रासंगिक लाइब्रेरी स्क्रिप्ट ढूंढना मुश्किल हो सकता है।

  2. (overcomplicated?)

    उपयोग किसी तरह का प्रत्येक कार्य परियोजना स्क्रिप्ट फ़ाइल है कि पुस्तकालय लिपियों में से एक की आवश्यकता है में समारोह 'की आवश्यकता है'। जब एक लाइब्रेरी स्क्रिप्ट को एक उपकरण अपडेट किया जाता है तो यह तय कर सकता है कि कौन सी कार्य परियोजनाओं को पुस्तकालय स्क्रिप्ट की आवश्यकता है और नवीनतम संस्करण को कार्य प्रोजेक्ट में कॉपी करें। यदि उचित निर्भरता के बिना कोई स्क्रिप्ट चलती है तो यह एक त्रुटि फेंक देगी जो उपयोगकर्ता को याद दिलाती है कि लाइब्रेरी से नवीनतम संस्करण कैसे प्राप्त करें।

प्रश्न

  • किसी को भी करने से पहले इस समस्या का समाधान है?
  • क्या PowerShell के लिए मौजूदा निर्भरता प्रबंधन उपकरण हैं जो 2 करेंगे?

उत्तर

0

ड्रॉपबॉक्स जैसे कुछ का उपयोग करना एक साधारण समाधान होगा। आप देख सकते हैं कि मैं इसे अपने पावरशेल स्क्रिप्ट्स के लिए यहां कैसे उपयोग करता हूं: http://www.ravichaganti.com/blog/?p=1963

आप 2 जीबी फ्री स्पेस http://db.tt/1DID1mR के साथ ड्रॉपबॉक्स खाता प्राप्त कर सकते हैं। 2 जीबी, मेरी राय में, सरल लिपियों के लिए पर्याप्त से अधिक है। बाजार में अन्य विकल्प भी हैं। हालांकि, मैं DropBox की सलाह देते हैं। मुफ़्त खाता 30 दिन पुराने फ़ाइल संस्करणों को बहाल करने का समर्थन करता है।

1

मैंने आपके लिए एक समाधान बनाया है जो मुझे लगता है कि आपकी स्थिति फिट होगी। मैंने इसे गीत प्लेलिस्ट पद्धति के आधार पर बनाया है। मैंने एक एक्सएमएल दस्तावेज़ बनाया है जहां आप अपनी प्रत्येक स्क्रिप्ट को व्यक्तिगत रूप से सूचीबद्ध करेंगे और उसी दस्तावेज़ में किसी अन्य नोड में आप उन स्क्रिप्ट को सूचीबद्ध करेंगे जिन्हें आप प्रत्येक प्रोजेक्ट के लिए प्रतिलिपि बनाना चाहते हैं। मैंने नीचे इसका एक कामकाजी उदाहरण बनाया है। हालांकि यह कुछ सौ स्क्रिप्ट फाइलों या परियोजनाओं के बहुत से प्रबंधन के समय सुरुचिपूर्ण नहीं है लेकिन यह काम पूरा हो जाता है।

PS1 स्क्रिप्ट

[xml]$XML = gc "C:\XMLFile1.xml" 
$Scripts = $XML.Root.Scripts.Script 
$Projects = $XML.Root.Projects.Project 
foreach($Project in $Projects){ 
    $ProjectLocation = $Project.CopyPath 
    $ProjectScripts = $Project.Script 
    foreach($Script in $ProjectScripts){ 
     $ScriptPath = ($Scripts|?{$_.ID -eq $Script.ID}|Select Path).Path 
     Copy-Item -Path $ScriptPath -Destination $ProjectLocation 
    } 
} 

XMLFile

<Root> 
    <Scripts> 
    <Script ID="1" Path="C:\1.PS1"></Script> 
    <Script ID="2" Path="C:\2.PS1"></Script> 
    <Script ID="3" Path="C:\3.PSM1"></Script> 
    </Scripts> 
    <Projects> 
    <Project Name="Project1" CopyPath="\\Server\Share\Project1"> 
     <Scripts ID="1"/> 
    </Project> 
    <Project Name="Project2" CopyPath="C:\Projects\Project2"> 
     <Scripts ID="1"/> 
     <Scripts ID="3"/> 
    </Project> 
    </Projects> 
</Root> 

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

  • कोई संबंधित समस्या नहीं^_^