2009-06-18 16 views
44

(मेरा मानना ​​है कि नहीं कर सकते मैं वास्तव में इस पूछ रहा हूँ, लेकिन मैं दिन के लिए brainpower से बाहर हूँ।)PowerShell स्क्रिप्ट्स कहां रखना है?

मैं सिर्फ अपनी पहली गंभीर PowerShell स्क्रिप्ट को लिखा और मैं इसके साथ बहुत खुश हूँ। मैं इसे हर दिन या तो इस्तेमाल करने की योजना बना रहा हूं। मैं इसे पॉश कमांड लाइन से कॉल करने में सक्षम होना चाहता हूं। मैं इसे एक क्रिया-संज्ञा प्रकार का नाम दूंगा, लेकिन अभी के लिए यह एक सरल .ps1 है और उन फैंसी उन्नत कार्यों में से एक नहीं है जो पैरा और इस तरह लेते हैं।

तो यह कहां जाना चाहिए और मैं उसे पॉश कमांड लाइन से कैसे कॉल करूं? मैं और लिखने की योजना बना रहा हूं! वे कहाँ जाना चाहिए?

  • क्या यह मेरी प्रोफ़ाइल में एक कार्य होना चाहिए?
  • क्या यह मेरे रास्ते पर जाना चाहिए?
  • क्या यह PSMODULEPATH में जाता है? वैसे भी किस तरह की चीजें जाती है? क्या यह बार-बार दिखता है या यह सामान्य पाथ की तरह है?

आप सभी अपनी पावरशेल स्क्रिप्ट्स कहां रखते हैं और आप उन्हें व्यवस्थित कैसे करते हैं? मुझे सी # और सी ++ उपकरण बनाने का बहुत अनुभव है और पता है कि उन्हें क्या नाम देना है और उन्हें कहां रखा जाए। और दूसरी चरम पर मैंने बहुत सी गड़बड़ी की है। बैट फाइलें जो आमतौर पर कुछ फ़ोल्डर में एक ढेर में स्टैंडअलोन या ढेर होती हैं। लेकिन पावरशेल बहुत अलग दिखता है। आप वास्तव में जल्दी से क्रैपी .bat फ़ाइल प्रकार की चीजें बना सकते हैं, या आप इसके साथ पुस्तकालयों और परिष्कृत सेवाओं का निर्माण कर सकते हैं।

मैं वास्तव में कुछ विचारों से प्यार करता हूं कि मुझे शुरू करने से पहले इन चीजों को व्यवस्थित करना शुरू करना चाहिए। जाहिर है सब लोग अलग हैं, इसलिए मैं कुछ चर्चा की उम्मीद कर रहा हूं। धन्यवाद!

उत्तर

23

मैंने अपनी व्यक्तिगत स्क्रिप्ट को मेरी प्रोफ़ाइल के समान फ़ोल्डर में रखा है। मैं फिर उन्हें & संस्करण का बैक अप ले सकता हूं। मेरी प्रोफ़ाइल शुरू होता है के साथ:

$ProfileRoot = (Split-Path -Parent $MyInvocation.MyCommand.Path) 
$env:path += ";$ProfileRoot" 
+1

$ स्क्रिप्ट का उपयोग करें: MyInvocation.MyCommand.Path, [निष्पादन स्क्रिप्ट का स्रोत पथ] देखें (http://stackoverflow.com/questions/801967/how-can-i-find-the-ource-path-of -एक-क्रियान्वित स्क्रिप्ट/6985381 # 6985381)। आपको प्रोफ़ाइल स्क्रिप्ट के साथ भी नेस्टेड कॉलर्स के साथ समस्याएं आती हैं, उदाहरण के लिए मेरे पास आपकी प्रोफ़ाइल को पुनः लोड करने के लिए एक सहायक कार्य है (फ़ंक्शन/वेरिएबल संपादन के बाद) लेकिन सभी एक बार init (जैसे .NET असेंबली लोड करना) छोड़ें। – yzorg

8

मेरी सिफारिशें: - स्क्रिप्ट को अपनी इच्छानुसार निर्देशिका में स्टोर करें, उदा। c: \ आलीशान - $ env के लिए निर्देशिका जोड़ें: पथ

$env:path += ";c:\posh" 

यह है कि आप अन्य निर्देशिका में हो सकता है सुनिश्चित करता है, का कहना है कि c: \ windows, लेकिन आप स्क्रिप्ट

[c:\windows] > sampl[TAB] # it expands the name of file to sample.ps1, then hit enter 

कॉल कर सकते हैं आपकी फ़ाइल sample.ps1 कार्यों परिभाषाओं है और आपने इसकी हर बार आयात करते हैं, तो मैं स्क्रिप्ट संगठन के संबंध में अपने $ प्रोफ़ाइल फ़ाइल

. c:\posh\sample.ps1 

को यह लाइन जोड़ने पर विचार होगा .. बस से स्क्रिप्ट के उद्देश्य के अनुसार veral डीआईआरएस :) व्यक्तिगत, देव, बाहरी (डाउनलोड), नमूने, ...

12
V2 के साथ

, आप WindowsPowerShell निर्देशिका जहां अपने प्रोफ़ाइल है में एक मॉड्यूल निर्देशिका बना सकते हैं। जब आप आयात-मॉड्यूल चलाते हैं तो पीएस स्वचालित रूप से मॉड्यूल लोड करने के लिए उस निर्देशिका में दिखाई देगा। मैंने WindowsPowerShell के तहत एक "स्क्रिप्ट" निर्देशिका बनाई है साथ ही यह मॉड्यूल की एक भाई निर्देशिका है।

मैं कुछ निम्न कोड के साथ चर का उपयोग कर निर्देशिका स्थापित करने के लिए अपने प्रोफाइल का उपयोग करें:

ध्यान दें:: विकल्प "ModuleName" कुछ सार्थक के लिए

PS> cat $Profile 
$scripts = "$(split-path $profile)\Scripts" 
$modules = "$(split-path $profile)\Modules" 
$docs = $(resolve-path "$Env:userprofile\documents") 
$desktop = $(resolve-path "$Env:userprofile\desktop") 

PS> cat variable:\scripts 
C:\Users\andy.schneider\Documents\WindowsPowerShell\Scripts 

PS> cat variable:\modules 
C:\Users\andy.schneider\Documents\WindowsPowerShell\Modules 
+0

यह वही है जो मैं करता हूं। हालांकि मेरे पास स्क्रिप्ट के साथ "लाइब्रेरीज़" निर्देशिका भी है, जो कि मेरा प्रोफ़ाइल ऑटो कार्यों को परिभाषित करने के लिए स्वत: निष्पादित करता है। मैंने PowerShell v1 में ऐसा किया है, मैं संभवतः मॉड्यूल के साथ उन सभी को प्रतिस्थापित कर दूंगा। – JasonMArcher

7

यह मैं क्या कर रहा है।

मॉड्यूल बनाएं और इसे वैश्विक मॉड्यूल फ़ोल्डर में "सी: \ विंडोज \ System32 \ WindowsPowerShell \ v1.0 \ मॉड्यूल \ मॉड्यूलनाम \ ModuleName.psm1" के रूप में सहेजें। उदाहरण के लिए:

function global:FancyFunction() { 
    # do something interesting here. 
} 

Export-ModuleMember -function FancyFunction 

अपने powershell प्रोफ़ाइल खोलें और अपने मॉड्यूल हर बार जब आप एक powershell सत्र शुरू भरी हुई है सुनिश्चित करने के लिए निम्न पंक्ति जोड़ें:

Import-Module ModuleName -Force 

आप टाइप करके अपने powershell प्रोफ़ाइल प्राप्त करें easiliy सकते हैं :

notepad $profile 

जब आप एक नया powershell सत्र खोलते हैं, तो आप कुछ भी ELS करने के लिए बिना कंसोल से या अन्य लिपियों से अपने फ़ंक्शन को कॉल करने में सक्षम होना चाहिए ई।

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