2016-11-01 29 views
5

Tôi mới sử dụng Powershell và không có nhiều nền tảng lập trình, chỉ cần cố gắng sử dụng nó để đóng gói phần mềm. Dù sao, tôi phát hiện ra về lệnh bắt đầu quá trình với tham số -Wait, và nó hoạt động tuyệt vời cho hầu hết mọi thứ. Những gì tôi nhận thấy mặc dù là nó không chỉ chờ đợi cho quá trình bạn chỉ định, nó chờ đợi cho bất kỳ quy trình phụ, ngay cả sau khi quá trình chính không còn chạy. Thông thường điều này là tốt, nhưng tôi có một tình huống kỳ lạ. Tôi đang chạy một tập tin batch Oracle phức tạp với quá trình bắt đầu. Các tập tin thực thi cuối cùng chạy setup.exe đó là những gì tôi thực sự muốn chờ đợi, nhưng các quá trình khác đẻ trứng quá mà không bao giờ dừng lại. Vì vậy, nếu tôi sử dụng tham số -wait, tập lệnh không bao giờ dừng ngay cả sau khi setup.exe không còn chạy nữa. Gần nhất tôi đã tìm thấy là sử dụng điều này:Sử dụng lệnh bắt đầu và lệnh chờ trong Powershell

saps -FilePath "Path\config.bat" -ArgumentList "arguments" 
Start-Sleep -s 10 
Wait-Process -Name "setup" 

Công trình này, nhưng tôi nghĩ sẽ có cách tốt hơn mà không phải sử dụng lệnh hết thời gian chờ. Bất kỳ ý tưởng?

+0

'$ process = Bắt đầu xử lý $ path" đối số "-PassThru; $ process.WaitForExit ($ timeoutMS) ' –

Trả lời

11

bạn có thể sử dụng lệnh này dễ dàng:

$myprocss = Start-Process "powershell" -PassThru 
$myprocss.WaitForExit() 

lệnh này sẽ tiếp tục khi quá trình kết thúc.

+0

Cảm ơn, đã hoạt động! Tôi tò mò, mục đích của việc thêm lệnh -PassThru trong trường hợp này là gì? – Chris

+0

@Chris: khi bạn bắt đầu quá trình, bạn sẽ tạo quy trình mới. khi u sử dụng -passthru bạn phân bổ thông tin quá trình hoặc quá trình bất động sản vào một biến như $ myprocess và u có thể kiểm tra quá trình của bạn với điều này. – saftargholi

+0

@Chris: nếu bạn thích câu trả lời của tôi, vui lòng bỏ phiếu cho câu trả lời của tôi – saftargholi

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