2012-02-11 45 views
11

Khi tôi chạy một chương trình trên PowerShell, nó sẽ mở ra một cửa sổ mới và trước khi tôi có thể thấy đầu ra, cửa sổ đóng lại. Làm thế nào để tôi làm cho nó như vậy PowerShell giữ cửa sổ này mở?Làm cách nào để PowerShell giữ cửa sổ lệnh mở?

+0

là chương trình này là tệp exe hoặc tệp hàng loạt? Bạn có thể đưa ra lệnh chính xác mà bạn đang chạy, có lẽ thay đổi tên của tệp thực thi? –

+0

Đó là một exe. Tôi đã thêm thư mục mà chương trình vào đường dẫn của tôi và khi tôi nhập tên chương trình nó chạy, ngoại trừ cửa sổ nó mở ra quá nhanh để tôi đọc nó nói gì. Chương trình là một chương trình để kiểm tra các chương trình python. Đối với bình luận của bạn dưới đây, tôi không biết làm thế nào để bọc một chương trình trong một tập tin thực thi:/ – Erman

+0

Tôi cập nhật câu trả lời của tôi để làm rõ làm thế nào để làm điều đó. Nó cũng có thể có ý nghĩa để chuyển hướng đầu ra chương trình của bạn vào một tập tin văn bản. –

Trả lời

1

Nếu chương trình là một tệp lô (.cmd hoặc .bat extension) được khởi chạy với lệnh cmd /c foo.cmd, chỉ cần thay đổi thành cmd /k foo.cmd và chương trình thực thi, nhưng lời nhắc vẫn mở.

Nếu chương trình không phải là tập tin thực thi, hãy quấn nó vào tập tin thực thi và thêm lệnh pause vào cuối. Để bọc chương trình trong một tập tin batch, chỉ cần đặt lệnh trong một tệp văn bản và cung cấp cho nó phần mở rộng .cmd. Sau đó, thực hiện thay vì exe.

8

Hãy thử thực hiện:

start-process your.exe -NoNewWindow 

Thêm một -Wait quá nếu cần thiết.

+0

Khi tôi làm điều này nó cho tôi biết "Bắt đầu quá trình: Điều này không thể thực hiện lệnh do lỗi: Hệ thống không thể tìm thấy tệp được chỉ định. " Điều lạ lùng vì tôi đã thêm vị trí của exe vào đường dẫn của tôi. – Erman

+0

@Erman - Hãy chắc chắn rằng nó thực sự là. Khởi động lại Powershell nếu cần. Hoặc sử dụng đường dẫn đầy đủ để xem điều gì đang diễn ra. – manojlds

+0

@Erman Tôi nghĩ bạn muốn đặt powershell.exe my.bat -NoNewWindow –

3

Tôi đã giải quyết một vấn đề tương tự vài tuần trước. Nếu bạn không muốn sử dụng & (& '.\program.exe') thì bạn có thể sử dụng quy trình bắt đầu và đọc đầu ra theo quy trình bắt đầu (nơi bạn đọc đầu ra một cách rõ ràng).

Chỉ cần đặt này PS1 tập tin riêng biệt - ví dụ (hoặc macro):

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() 

Và sau đó gọi nó thích:

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

Bạn cũng có thể dễ dàng chuyển hướng đầu ra hoặc thực hiện một số loại của thời gian chờ trong trường hợp ứng dụng của bạn có thể đóng băng ...

+0

Hoàn hảo. Chính xác những gì tôi đang tìm kiếm. Cảm ơn một tấn. – Saulius

4

OP có vẻ hài lòng với câu trả lời, nhưng nó không giữ cửa sổ mới mở sau khi thực hiện chương trình, đó là những gì anh ta có vẻ hỏi (và câu trả lời tôi đang tìm kiếm). Vì vậy, sau một số nghiên cứu khác, tôi đã đưa ra:

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

Một lựa chọn thay thế cho người thuần túy PowerShell sẽ là sử dụng powershell thay cho cmd: Bắt đầu quá trình powershell "của bạn.exe; read-host 'Nhấn Enter để tiếp tục' " – Cary

+1

Tôi sử dụng điều này:' Bắt đầu-quá trình "powershell" -wait -ArgumentList "cây 'D:'; tạm dừng "'. – larkee

Các vấn đề liên quan