2012-02-01 15 views
6

में स्क्रिप्ट का नाम प्राप्त करना क्या $ MyInvocation.InvocationName को स्क्रिप्ट नाम प्राप्त करने के लिए शक्तियों में छोड़कर कोई अन्य तरीका है? क्योंकि मुझे अपनी स्क्रिप्ट को एक्सई में बदलने की ज़रूरत है और उस स्थिति में यह उस exe पर काम नहीं करता है।पावरहेल

+0

आप कैसे exe को कॉल करते हैं और आप स्क्रिप्ट नाम कैसे पार करते हैं? –

+0

मैं स्क्रिप्ट को एक उपयोगिता का उपयोग करके exe में परिवर्तित करता हूं .. कार्यक्षमता स्क्रिप्ट के साथ ठीक काम करती है लेकिन अगर मैं स्क्रिप्ट के स्थान पर exe का उपयोग करता हूं तो यह काम नहीं करता .. –

+0

मुझे पता है कि एकमात्र तरीका $ Myinvocation का उपयोग कर रहा है। हो सकता है कि उपयोगिता (PS2EXE शायद§ ??) PSCmdlet को परिवर्तित नहीं कर सकती है। MyInvocation प्रॉपर्टी एक exe या उसके घेरे का जिक्र है। –

उत्तर

11

मुझे लगता है कि आप पावरहेल स्क्रिप्ट को एक्जिक्यूटेबल के स्थान के बाद निष्पादन योग्य में परिवर्तित कर रहे हैं। आप इसे इस तरह से प्राप्त कर सकते हैं:।

[Environment]::GetCommandLineArgs()[0] 
+0

वैसे काम किया गया है कि वास्तव में मैं बहुत चाहता था धन्यवाद जेन जेड .. :) –

+2

fwiw - यदि आप आईएसई में इसे डिबग कर रहे हैं, तो स्क्रिप्ट नाम दूसरा पैरामीटर बन जाता है: '[पर्यावरण] :: GetCommandLineArgs() [1]' –

0

आप कुछ है कि भीतर और आईएसई के बाहर काम करता है चाहते हैं तो आप

$MyInvocation.InvocationName 

पूर्ण रास्तों और के बाद से उपयोग कर सकते हैं \ YourScript.ps1 वापस किया जा सकता आप पार्स कर सकते हैं नाम:

[Regex]::Match($MyInvocation.InvocationName, '[^\\]+\Z', [System.Text.RegularExpressions.RegexOptions]::IgnoreCase -bor [System.Text.RegularExpressions.RegexOptions]::SingleLine).Value