2012-02-20 42 views
14

Tôi biết rằng có ít công tắc -noexit cho PowerShell.Dừng Powershell thoát khỏi số

Vẫn còn ở trong vỏ mà không sử dụng công tắc đó?

Nói cách khác, tôi muốn một lệnh script thực hiện sau đó để mở trình bao.

+0

Để (cụ thể hơn) cụ thể hơn: Người dùng nhấp chuột phải vào trình thu thập, chọn "Chạy trong Powershell" từ trình đơn ngữ cảnh, thực thi bỏ qua và mở vỏ. – rhavin

+0

bạn cần phải thay đổi thực đơn bữa trưa theo ngữ cảnh thêm -noexit –

+0

Cristian, đó rõ ràng là KHÔNG từ bên trong skript. – rhavin

Trả lời

10

Tập lệnh này sẽ không thoát nếu bạn chạy không có đối số, ví dụ: bằng cách kích đúp vào nó:

param($Work) 

# restart PowerShell with -noexit, the same script, and 1 
if (!$Work) { 
    powershell -noexit -file $MyInvocation.MyCommand.Path 1 
    return 
} 

# now the script does something 
# this script just outputs this: 
'I am not exiting' 
+0

Tôi mặc dù về việc đăng bài hack này. Kỹ thuật tương tự như bản nâng cấp UAC. Không đẹp, nhưng nó hoạt động. –

0

Như thế này?

PowerShell -File c:\myscript.ps1 -NoExit 
+0

Không, vẫn sẽ thoát PS nếu tôi nhấp vào tệp chứa dòng của bạn. Tôi cần một cách từ WITHIN một skript để ngăn chặn các phiên CURRENT từ thoát. – rhavin

+1

Đọc Andy trả lời! –

2

Tôi không nhận thức được một lệnh bạn có thể chạy trong kịch bản đó sẽ ngăn chặn vỏ từ thoát nếu nó đã không được gọi bằng cách sử dụng lệnh -noexit.

Tôi thường sử dụng Read-Host "Press ENTER to continue" ở cuối nếu tôi không muốn vỏ đóng. Tuy nhiên, điều này sẽ không ngăn chặn trình bao đóng sau khi bạn nhấn enter nếu nó chưa được bắt đầu bằng -noexit.

+0

Vì vậy, điều đó thật không may là những gì tôi cần. – rhavin

+0

'noexit' thay đổi cách PowerShell.exe khởi tạo giống như' cmd.exe/k'. Một khi nó đã được khởi tạo một cách tôi không nghĩ rằng nó có thể được thay đổi. –

6

Các bạn đã thử

$host.enternestedprompt() 

Đó sẽ ngừng thực hiện và thả chúng vào một cửa sổ lồng nhau. Khi họ thoát khỏi dấu nhắc đó, kịch bản sẽ kết thúc và cửa sổ sẽ đóng lại.

+0

Đây là một bản hack thú vị. Tôi thích nó, luôn luôn tự hỏi phương pháp đó đã làm gì ... –

+2

Tôi vừa nhận thấy câu hỏi cũng được gắn thẻ powershell-remoting. Nếu kịch bản được đề cập đang chạy như một công việc trên một hệ thống từ xa, thì việc hack đó sẽ không hoạt động. – mjolinor

3
"do stuff" 
Pause 

Vâng, giống như dòng lệnh - đầu ra:

do stuff 
Press Enter to continue...: 
+0

Và người dùng nên sử dụng cửa sổ PowerShell sau đó để nhập lệnh như thế nào? – rhavin

2

Vòng lặp while ở phần cuối của kịch bản tầm thường này nhắc tôi cho một lệnh và thực hiện nó. Nó chạy với môi trường của kịch bản, vì vậy có thể kiểm tra các giá trị của các biến. Nhập "exit" sẽ chấm dứt vòng lặp khi nó được thực hiện.

# Do something. 

cd D:\temp 
$current_directory = $(pwd) 
dir 

write-host # Just add a little space after the dir 

# Stay in the shell and execute commands. 

while ($TRUE) { 
    $cmd = Read-Host "PS $(pwd)" 
    if ($cmd[0] -eq '"') { iex "& $cmd" } 
    else { iex $cmd } 
} 

Tôi chắc chắn rằng những người khác sẽ có thể chia sẻ một số sàng lọc, nhưng đây là sự bắt đầu. Trân trọng.

12

Về cơ bản bạn có 3 tùy chọn để ngăn cửa sổ PowerShell Console đóng lại, mà tôi mô tả in more detail on my blog post.

  1. một lần Fix: Chạy kịch bản của bạn từ Console PowerShell, hoặc khởi động quá trình PowerShell bằng cách sử dụng công tắc -NoExit. ví dụ. PowerShell -NoExit "C:\SomeFolder\SomeScript.ps1"
  2. Per-script Khắc phục: Thêm lời nhắc nhập liệu vào cuối tệp tập lệnh của bạn. ví dụ. Read-Host -Prompt "Press Enter to exit"
  3. Sửa lỗi toàn cầu: Thay đổi khóa đăng ký của bạn để luôn mở cửa sổ PowerShell Console mở sau khi tập lệnh kết thúc chạy.

Xem blog của tôi để biết thêm thông tin về các khóa registry cần sửa đổi.

Có vẻ như bạn đang tìm kiếm tùy chọn # 1 hoặC# 3.

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