2012-01-24 12 views
5

मैंने http://poshcode.org/2205 से Register-TemporaryEvent cmdlet डाउनलोड किया है और इसे $profile स्क्रिप्ट के पास अपनी पावरहेल प्रोफ़ाइल निर्देशिका में रखा है।एक नया पावरहेल cmdlet कैसे आयात करें?

मैं एक नया आदेश Register-TemporaryEvent कैसे बना सकता हूं जो इस स्क्रिप्ट से बंधेगा?

धन्यवाद।

उत्तर

2

पावरशेल के साथ, यदि आप 'पथ' पर्यावरण चर में निहित निर्देशिकाओं में रखे गए हैं तो आप स्क्रिप्ट को कमांड के रूप में निष्पादित कर सकते हैं। क्या निर्देशिका पथ में हैं देखने के लिए, आप का उपयोग कर सकते हैं:

$env:Path -split ';'| sort 

आप अपने लिपियों के स्थान शामिल करने के लिए विंडोज 'सिस्टम गुण से स्थायी रूप से पथ को संशोधित कर सकता है, या आप अस्थायी रूप से अपनी प्रोफ़ाइल से पथ को संशोधित कर सकता है या लिपि। अपने विशेष मामले में, आप पथ के लिए प्रोफ़ाइल निर्देशिका जोड़ने के लिए अपने प्रोफ़ाइल के लिए निम्न जोड़ सकते हैं:

PS >$timer = New-Object Timers.Timer 
PS >Register-TemporaryEvent $timer Disposed { [Console]::Beep(100,100) } 

नोट::

$ScriptRoot = Split-Path $SCRIPT:MyInvocation.MyCommand.Path 

if(($env:Path -split ';') -notcontains $ScriptRoot) { 
    $env:Path += ';' + $ScriptRoot 
} 

फिर आप के रूप में कमांड चला सकते हैं जब टैब को पूरा करने, यह Register-TemporaryEvent.ps1 के रूप में पूरा हो जाएगा, लेकिन आप '.ps1' को हटा सकते हैं और यह अभी भी काम करेगा।

+0

क्या यह अभी भी सच है? मेरे पास मेरे PATH के अंदर एक फ़ोल्डर है जिसमें .ps1 फ़ाइलें हैं, मेरे PATHEXT में .ps1 एक्सटेंशन, और जब मैं स्क्रिप्ट को इसके नाम से आमंत्रित करने का प्रयास करता हूं, तो मुझे "शब्द 'foo' को नाम के रूप में पहचाना नहीं जाता है cmdlet, फ़ंक्शन, स्क्रिप्ट फ़ाइल, या ऑपरेट करने योग्य प्रोग्राम। " (लेकिन यह एक cmd प्रॉम्प्ट से काम करता है) – zneak

+0

यह हमेशा मेरे लिए सभी PowerShell संस्करणों में v2 से v5 के लिए काम करता है। यदि आप पावरहेल प्रॉम्प्ट पर '$ env: पथ' दर्ज करते हैं, तो क्या आप वहां फ़ोल्डर देखते हैं? हो सकता है कि पथ को स्थायी रूप से जोड़ा नहीं गया था या पाथ बदल दिया गया था क्योंकि explorer.exe को पुनरारंभ नहीं किया गया है। इसके अलावा, स्क्रिप्ट को पावरहेल से कॉल करने के लिए .ps1 को PATHEXT में होने की आवश्यकता नहीं है। – Rynant

2

आप स्क्रिप्ट फ़ाइल की सामग्री प्राप्त कर सकते हैं, इसे एक फ़ंक्शन में संलग्न कर सकते हैं और फ़ंक्शन बनाने के लिए कोड का आह्वान कर सकते हैं।

$sb = Get-Content .\script.ps1 | Out-String 
Invoke-Expression "function Register-TemporaryEvent {`n $sb `n} " 
संबंधित मुद्दे