Windows CLI: nếu dịch vụ không chạy, hãy khởi động dịch vụ


4

Tôi cần chạy kiểm tra dòng lệnh để xem dịch vụ có bị dừng hay không và nếu có, hãy khởi động nó. Tôi không thể khởi động nó bởi vì sau đó tôi nhận được một mã kết quả xấu và chuỗi nhiệm vụ SCCM tôi cần nó không thành công.

Đây là những gì tôi nghĩ nên thực hiện mẹo nhưng không:

IF NOT ('sc query "bits"^| find "RUNNING"')=="" sc start "bits"

Lỗi tôi nhận được là: truy vấn không mong muốn tại thời điểm này.

Tôi muốn làm điều này trong một dòng duy nhất.

Cảm ơn đã

Câu trả lời:


4

Cho dù bạn có xem xét một dòng này vì nó sử dụng ký tự &, nhưng về:

sc query bits | find "RUNNING" & if errorlevel 1 sc start bits

thử nghiệm nó ngay bây giờ. Tôi nghi ngờ nó sẽ hoạt động, bởi vì ngay khi có lỗi xảy ra, toàn bộ sự việc sẽ thất bại. Trong trường hợp này, bạn chỉ hành động theo lỗi, nhưng lỗi vẫn xảy ra ... tôi nghĩ sao? Sẽ cho bạn biết nếu nó hoạt động!
HannesFostie

Nếu bất cứ điều gì đang chạy lệnh này đều coi tất cả là một dòng, thì nó sẽ hoạt động vì errorlevel được trả về thường là 0. Nếu trạng thái đã chạy, thì lệnh find sẽ trả về 0, nếu không các bit sc start sẽ trả về 0 (giả sử dịch vụ bắt đầu).
sgmoore

Tùy chọn khác mà bạn có là viết một tệp bó dài hơn và sau đó sử dụng một trong các bat để trình biên dịch / chuyển đổi.
sgmoore

Có vẻ như đây là một mánh khóe, xấu hổ vì giải pháp của tôi không hoạt động vì tôi không thể thực thi điều này trong WinPE trước khi hệ điều hành tải vì một số lý do
HannesFostie

1

Nếu bạn sẵn sàng sử dụng PowerShell, bạn có thể làm điều này:

Get-Service | Where-Object {$_.status -eq "stopped" -and $_.name -eq "MySvcName"} | Start-Service

Bạn chỉ cần chắc chắn chuyển tên dịch vụ, không phải tên hiển thị, cho lệnh where-object. Bạn có thể thấy hai tên trên trang thích hợp dịch vụ.

BIÊN TẬP:

Nếu bạn muốn có một lớp lót trong cmd, bạn có thể nhúng một lớp quyền hạn trong một lớp lót một cmd:

powershell -Command "& {Get-Service | Where-Object {$_.status -eq \"stopped\" -and $_.name -eq \"MySvcName\"} | Start-Service }"

PS không thực sự là một lựa chọn cho chúng tôi, nhưng cảm ơn!
HannesFostie

1
@Hannes, tôi đã cập nhật để hiển thị cách bạn có thể gọi các lệnh powershell từ cmd
dsolimano

cảm ơn rất nhiều, tuy nhiên PS sẽ không được cài đặt trên các máy tính này và không có lý do thực sự để cài đặt nó ngay bây giờ.
HannesFostie
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.