Trao đổi PowerShell trong tác vụ theo lịch trình sẽ chạy mãi mãi


8

Tôi có một vài tập lệnh PowerShell của Exchange 2010 mà tôi muốn chạy dưới dạng Tác vụ theo lịch trình.

Nếu tôi khởi chạy PowerShell bằng cách sử dụng "Chạy với tư cách người dùng khác", tôi có thể chạy các tập lệnh và chúng thực thi chính xác.

Nếu tôi lên lịch tác vụ bằng chính người dùng đó, tác vụ sẽ ở trạng thái Chạy mãi mãi.

Làm thế nào tôi có thể tìm ra nơi nhiệm vụ đang bị mắc kẹt?

Để tham khảo, đây là cách tôi kích hoạt công cụ Exchange:

. 'C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'
Connect-ExchangeServer -auto

Và đây là những cách tôi đã cố gắng để chạy tập lệnh từ Trình lập lịch tác vụ:

  • powershell -command "& {. 'c: \ windows \ script.ps1'}"
  • powershell -file 'c: \ windows \ script.ps1'
  • powershell -file "c: \ windows \ script.ps1"

Tất cả với cùng một kết quả. Ơ ...


Bình luận muộn cho bữa tiệc, nhưng tôi có hành vi tương tự. Một tác vụ theo lịch trình được đăng ký bằng PowerShell Register-ScheduledJob'không bao giờ' kết thúc 'nó đã kết thúc khi tôi đóng bảng điều khiển PowerShell và ISE.
dùng4317867

Câu trả lời:


3

Bạn cần phải sửa đổi chính sách thực thi của mình hoặc chỉ định -ExecutionPolicy Bypasslàm tham số dòng lệnh.

powershell -Command "<path to .ps1 script>" -ExecutionPolicy Bypass

1
Tôi đã thêm tùy chọn ExecutPolicy vào các tham số dòng lệnh của mình. Không thay đổi; Nhiệm vụ vẫn chạy mãi.
longneck

2

Không chắc đây có phải là cách bạn đang thực hiện hay không, nhưng khi tôi đang chạy các tập lệnh PowerShell thông qua bộ lập lịch tác vụ, tôi sử dụng hành động "Bắt đầu một chương trình" và chọn powershell và sau đó thêm các đối số từ đó. Đó có thể là những gì bạn đang làm ở đây, nhưng nó không rõ ràng. Đây là một ảnh chụp màn hình: nhập mô tả hình ảnh ở đây

Chính sách thực thi của TheCompWiz cũng có thể là một vấn đề.


Đó thậm chí không phải là cú pháp dòng lệnh hợp lệ cho powershell.exe, nhưng chỉ vì cái quái đó tôi đã thử nó. Nhiệm vụ ngay lập tức thất bại.
longneck

Thú vị bởi vì tất cả các nhiệm vụ quyền hạn hàng ngày của tôi chạy theo cách đó và chúng hoạt động tốt.
ZnewmaN

C: \ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe -command "& 'c: \ windows \ script.ps1'"
ZnewmaN

à, có sự khác biệt ảnh chụp màn hình của bạn không hiển thị-command
longneck

Vâng, cá nhân tôi thực sự không sử dụng -command, nhưng có lẽ đó là cách sử dụng đúng đắn.
ZnewmaN

0

Tôi đã từng gặp vấn đề tương tự. Trong trường hợp của tôi, giải pháp là chỉ định thư mục "start in" (tập lệnh của tôi sẽ đọc nội dung của tệp mà nó không tìm thấy vì tôi không chỉ định đường dẫn đầy đủ đến tệp).


0

Tôi đã có cùng một vấn đề và nhận xét của "user279399" để sử dụng lệnh taskkill là rất hữu ích, chỉ cần sửa đổi. Đây là giải pháp của tôi ở cuối cú pháp đối số

taskkill /f /fi "USERNAME eq domain\exchadmin" /im powershell.exe

Lệnh này chỉ giết phiên powershell đang chạy trong tài khoản người dùng đó. Cách tốt nhất là có một tài khoản quản trị trao đổi riêng để chạy các tác vụ theo lịch trình.


-3

Hãy thử thêm vào cuối tập lệnh của bạn [taskkill / f / im "powershell.exe"] điều này sẽ giết tất cả các quy trình "powershell.exe". Tôi không biết làm thế nào để tiêu diệt quy trình vỏ điện hiện tại (tương đương với [cmd.exe / c]). Nhưng nó sẽ làm được mẹo.


Và nếu có một kịch bản quyền hạn khác đang chạy, có lẽ đang làm điều gì đó quan trọng? Bạn sẽ giết các quá trình này mà không cần hỏi? Trên môi trường sản xuất? Như một thói quen? Nghiêm túc?!
Esa Jokinen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.