2011-01-09 13 views
68

का उपयोग कर एक EXE फ़ाइल निष्पादित करना मैं PowerShell स्क्रिप्ट का उपयोग कर EXE फ़ाइल निष्पादित करने का प्रयास कर रहा हूं। अगर मैं एक समस्या के बिना आदेश पंक्ति यह काम करता है का उपयोग करें (पहले मैं निष्पादन योग्य और मानकों की श्रृंखला के नाम की आपूर्ति यह आह्वान करने के लिए):PowerShell स्क्रिप्ट

"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode 

लेकिन एक स्क्रिप्ट के अंदर सटीक ही बात कर रहे एक त्रुटि देता है:

The term '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

(मैं कमांड "&" ऑपरेटर का उपयोग कर लागू किया।)

मैं इस समस्या का समाधान कैसे कर सकते हैं?

+3

अपना कोड, कृपया पोस्ट करें। चूंकि समस्या यह है कि इसे देखने के लिए अनुमान लगाने से कहीं अधिक आसान है। –

उत्तर

79
& "C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode

या

[System.Diagnostics.Process]::Start("C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe", "C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode")

अद्यतन: माफ करना मैं याद किया "(मैं आदेश का उपयोग कर लागू" वाक्य & "ऑपरेटर)"। जब मैं गतिशील रूप से पथ का मूल्यांकन कर रहा था तो मुझे यह समस्या थी। Invoke-Expression निर्माण का प्रयास करें:

Invoke-Expression "& `"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe`" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode"
+0

अजीब बात है कि मूल प्रश्न में आदेश, लगभग बिल्कुल, PS2.0 में एक वीएम पर मेरे लिए काम करता है। लेकिन वह वही आदेश अब PS4.0 सिस्टम पर विफल रहता है। दिलचस्प बात है, मैं टेस्टएक्सक्यूट भी बुला रहा हूं। मुझे लगता है कि मुझे विकल्प 2 सबसे अच्छा पसंद है, मैं इसे एक शॉट दूंगा, धन्यवाद! – EJA

22

ऐसा लगता है कि आप EXE और उसके पहले तर्क को एक स्ट्रिंग में निर्दिष्ट कर रहे हैं उदाहरण; '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'। यह काम नहीं करेगा। सामान्य तौर पर आप एक देशी आदेश इसलिए की तरह अपने रास्ते में एक जगह है कि आह्वान:

& "c:\some path with spaces\foo.exe" <arguments go here> 

कि & एक स्ट्रिंग है एक कमांड को दिखाता है के बाद किया जाने की उम्मीद है: cmdlet, समारोह, देशी exe रिश्तेदार या निरपेक्ष पथ। आवश्यक के रूप में बहस के हवाले से पर काम कर

& "c:\some path with spaces\foo.exe" 

प्रारंभ:

एक बार जब आप सिर्फ इस काम करके

। यद्यपि ऐसा लगता है कि आपके तर्क ठीक होना चाहिए (कोई स्थान नहीं, PowerShell द्वारा व्याख्या किए गए कोई अन्य विशेष वर्ण नहीं)।

+1

क्या पथ के बिना पावरहेल स्क्रिप्ट निष्पादित करने के लिए वैसे भी है, यदि स्क्रिप्ट और exe एक ही फ़ोल्डर में हैं? या क्या एक सापेक्ष पथ का उपयोग करना संभव है? – guanome

+6

यदि exe एक ही फ़ोल्डर में है तो आप यह '। \ Foo.exe' कर सकते हैं और आप एक सापेक्ष पथ '.. \ .. \ foo.exe' और रिक्त स्थान' और 'के साथ एक सापेक्ष पथ भी उपयोग कर सकते हैं। \ \ \ \ spaces \ foo.exe'' के साथ पथ। –

+0

जब आपके पास आपके आदेश में ** पाइप ** है, तो आपको उद्धरणों का उपयोग करना चाहिए: 'cmd/c" सी: \ temp \ strarc.exe -cjd: एम: \ | सी: \ temp \ strarc.exe -s: 8 -xd: लागू नहीं: \ "'। – larkee

-1

शब्द 'greyhound.exe' एक cmdlet, समारोह, स्क्रिप्ट फ़ाइल, या प्रचलित कार्यक्रम के नाम के रूप में मान्यता प्राप्त नहीं है ...

लेकिन अगर मैं एक विश्वसनीय आदेश के रूप में यह चलाते हैं। \ Greyhound.exe तो निष्पादन योग्य रन।