2012-02-11 14 views
11

जब मैं पावरशेल पर एक प्रोग्राम चलाता हूं तो यह एक नई विंडो खुलता है और आउटपुट देखने से पहले, खिड़की बंद हो जाती है। मैं इसे कैसे बना सकता हूं PowerShell इस विंडो को खुला रखता है?कमांड विंडो को खोलने के लिए PowerShell कैसे प्राप्त करें?

+0

क्या यह प्रोग्राम एक exe, या बैच फ़ाइल है? क्या आप सही आदेश दे रहे हैं जो आप चल रहे हैं, शायद निष्पादन योग्य नाम बदल रहे हैं? –

+0

यह एक exe है। मैंने फ़ोल्डर जोड़ा है कि प्रोग्राम मेरे पथ में है और जब मैं प्रोग्राम के नाम पर टाइप करता हूं तो यह चलता है, जो खिड़की खुलता है उसे छोड़कर मेरे पास जो भी कहता है उसे पढ़ने के लिए बहुत तेज़ी से बंद हो जाता है। कार्यक्रम पायथन कार्यक्रमों का परीक्षण करने के लिए एक कार्यक्रम है। नीचे दी गई आपकी टिप्पणी के लिए, मुझे नहीं पता कि बैच फ़ाइल में किसी प्रोग्राम को कैसे लपेटें:/ – Erman

+0

मैंने यह स्पष्ट करने के लिए अपना उत्तर अपडेट किया कि यह कैसे करें। यह आपके प्रोग्राम आउटपुट को टेक्स्ट फ़ाइल में रीडायरेक्ट करने का भी अर्थ हो सकता है। –

उत्तर

1

यदि प्रोग्राम cmd /c foo.cmd कमांड के साथ लॉन्च किया जा रहा है तो बैच फ़ाइल (.cmd या .bat एक्सटेंशन) है, बस इसे cmd /k foo.cmd पर बदलें और प्रोग्राम निष्पादित हो जाता है, लेकिन प्रॉम्प्ट खुला रहता है।

यदि प्रोग्राम बैच फ़ाइल नहीं है, तो इसे बैच फ़ाइल में लपेटें और pause कमांड को इसके अंत में जोड़ें। प्रोग्राम को बैच फ़ाइल में लपेटने के लिए, बस एक टेक्स्ट फ़ाइल में कमांड रखें और इसे .cmd एक्सटेंशन दें। फिर exe के बजाय निष्पादित करें।

8

करने का प्रयास करें:

start-process your.exe -NoNewWindow 

एक -Wait भी अगर जरूरत जोड़ें।

+0

जब मैं ऐसा करता हूं तो यह मुझे बताता है "प्रारंभ-प्रक्रिया: यह त्रुटि के कारण आदेश निष्पादित नहीं किया जा सकता है: सिस्टम निर्दिष्ट फ़ाइल नहीं ढूंढ सकता है। " जो अजीब है क्योंकि मैंने अपने पथ पर exe का स्थान जोड़ा। – Erman

+0

@ एर्मन - सुनिश्चित करें कि यह वास्तव में है। यदि आवश्यक हो तो पावरहेल को पुनरारंभ करें। या क्या चल रहा है यह देखने के लिए पूर्ण पथ का उपयोग करें। – manojlds

+0

@Erman मुझे लगता है कि आप powerhell.exe my.bat -NoNewWindow –

3

मैं कुछ हफ्ते पहले इसी तरह की समस्या को हल कर रहा था। यदि आप & (& '.\program.exe') का उपयोग नहीं करना चाहते हैं तो आप प्रारंभ प्रक्रिया का उपयोग कर सकते हैं और प्रारंभ प्रक्रिया द्वारा आउटपुट पढ़ सकते हैं (जहां आप स्पष्ट रूप से आउटपुट पढ़ते हैं)।

param (
    $name, 
    $params 
) 

$process = New-Object System.Diagnostics.Process 
$proInfo = New-Object System.Diagnostics.ProcessStartInfo 
$proInfo.CreateNoWindow = $true 
$proInfo.RedirectStandardOutput = $true 
$proInfo.RedirectStandardError = $true 
$proInfo.UseShellExecute = $false 
$proInfo.FileName = $name 
$proInfo.Arguments = $params 
$process.StartInfo = $proInfo 

#Register an Action for Error Output Data Received Event 
Register-ObjectEvent -InputObject $process -EventName ErrorDataReceived -action { 
    foreach ($s in $EventArgs.data) { Write-Host $s -ForegroundColor Red } 
} | Out-Null 

#Register an Action for Standard Output Data Received Event 
Register-ObjectEvent -InputObject $process -EventName OutputDataReceived -action { 
    foreach ($s in $EventArgs.data) { Write-Host $s -ForegroundColor Blue } 
} | Out-Null 

$process.Start() | Out-Null 
$process.BeginOutputReadLine() 
$process.BeginErrorReadLine() 
$process.WaitForExit() 

और फिर यह फोन की तरह:

.\startprocess.ps1 "c:\program.exe" "params" 

तुम भी आसानी से उत्पादन अनुप्रेषित या किसी तरह लागू कर सकते हैं (उदाहरण के लिए या मैक्रो के लिए) -

बस इस के रूप में अलग PS1 फ़ाइल डाल यदि आपका एप्लिकेशन फ्रीज हो सकता है तो टाइमआउट का ...

+0

बिल्कुल सही। ठीक वही जो मेरे द्वारा खोजा जा रहा था। अनेक अनेक धन्यवाद। – Saulius

4

ओपी उत्तर से संतुष्ट था, लेकिन यह प्रोग्राम को निष्पादित करने के बाद नई विंडो को खुला नहीं रखता है, जो वह प्रतीत होता है पूछना (और वह जवाब जिसे मैं ढूंढ रहा था)। तो, कुछ और शोध के बाद, मैं आया:

Start-Process cmd "/c `"your.exe & pause `"" 
+2

पावरशेल शुद्धवादियों के लिए एक विकल्प cmd के स्थान पर पावरहेल का उपयोग करना होगा: स्टार्ट-प्रोसेस पावरहेल "आपका।प्रोग्राम फ़ाइल ; रीड-होस्ट 'जारी रखने के लिए एंटर दबाएं' ' – Cary

+1

मैं इसका उपयोग करता हूं:' स्टार्ट-प्रोसेस 'पावरहेल "-वेट-एर्ग्यूमेंटलिस्ट" पेड़' डी: '; थामने "'। – larkee

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