Truy vấn các nhiệm vụ bằng cách sử dụng Powershell


8

Trên máy Windows7, tôi đang thử Tôi có thể chạy truy vấn để xem tất cả các tác vụ được lên lịch bằng scht task.exe

Điều này tốt nhưng tôi cũng muốn lọc tập kết quả bằng cách sử dụng cái gì đó như

schtasks /query | where { $_.TaskName -eq "myTask" } 

Vấn đề là tôi không làm nhiệm vụ này trả về một danh sách được định dạng đúng cho chức năng nơi hoạt động.

Tôi cũng đã thử:

schtasks /query /FO LIST
schtasks /query | format-list | where ....

những cái đó cũng không hoạt động.

Cách tốt nhất để truy vấn các scht task trên máy tính cục bộ bằng Win7 và có thể lọc chúng


Có gì với dấu gạch chéo ngược trong đó? Tôi khá chắc chắn rằng đó không phải là những gì schtasksmong đợi ở đó, mà là một dấu gạch chéo về phía trước.
Joey

ha! bạn đúng. Tôi đã sửa nó ở trên
jdiaz

Câu trả lời:


8

Bạn có thể thử sử dụng scht task, điều này sẽ khiến bạn phân tích cú pháp văn bản. Điều này hầu như luôn luôn dễ bị lỗi, và chắc chắn khó khăn hơn nhiều so với việc lấy đầu ra của một lệnh.

Tình cờ có một mô-đun TaskScheduler trong PowerShellPack . Khi bạn cài đặt gói PowerShell, để nhận tất cả các tác vụ theo lịch trình, hãy sử dụng:

Import-Module TaskScheduler
Get-ScheduledTask -Recurse

Vì đây là các đối tượng thực, để tìm một tác vụ của một tên cụ thể, bạn có thể sử dụng:

Get-ScheduledTask -Recurse |  Where-Object { $_.Name -like "*Task*"}

Nói chung, bạn sẽ thấy rằng cộng đồng PowerShell đã sử dụng các dòng lệnh khó hơn rất nhiều, như scht task và biến chúng thành các lệnh ghép ngắn dễ sử dụng, như Get-Lên lịchTask.

Xem thêm:

Gửi email tự động bằng mô-đun TaskScheduler

Hi vọng điêu nay co ich


1
Điều này hoạt động rất tốt nếu bạn đang sử dụng các hộp Win2k8 (hoặc vista / W7). Thật không may, nó không hoạt động với các máy chủ W2k3 (vẫn còn rất phổ biến trong môi trường của tôi).
Mike Shepard

@MikeShepard Nếu bạn muốn đồ chơi mới, bạn phải ngừng sử dụng hệ điều hành 11 năm tuổi.
Ryan Ries

1
Đó là câu chuyện về sự nghiệp của tôi. :-(
Mike Shepard

2

Nếu bạn không cần phải làm điều đó trong powershell thì những điều sau đây sẽ hoạt động

nhiệm vụ / truy vấn | findstr / i "mytask"

phiên bản ps
scht Nhiệm vụ / truy vấn | ? {$ _ -như 'mytask'}


bất kỳ mẫu mã nguồn đầy đủ để tạo, truy vấn và xóa các tác vụ bằng cách sử dụng PS?
Kiquenet

2

Đây là một bài viết trên blog tôi đã viết về việc này. Về cơ bản, tôi đã lấy đầu ra của / FO LIST / V, viết nó vào một tệp và nhập lại dưới dạng các đối tượng bằng cách sử dụng import-csv


2
Bạn đang đi đúng hướng nhưng viết vào một tệp tạm thời là không cần thiết ở đây: schtasks /query /fo csv /v|convertfrom-csvhoạt động tốt
Joey

Điều này gọn gàng nhưng vẫn không dễ truy vấn
jdiaz

Johannes: bạn nói đúng, nhưng tôi thực sự (thực sự) không thích các thuộc tính có dấu cách / dấu hai chấm / dấu gạch chéo. jdiaz: Điều gì không thể truy vấn? Kịch bản tôi đã đăng và bản sửa đổi của Julian đều trả về các đối tượng quyền hạn bản địa với các thuộc tính. Chúng nên có thể truy vấn như bất kỳ thực thể quyền hạn nào khác.
Mike Shepard

1
Quả thật - chúng có thể truy vấn được ... schtasks /query /fo csv /v /s "myserver" | convertfrom-csv | Select TaskName, "Last Run Time", Author | ? {$_.Author -notmatch "microsoft|N/A|Author"}sẽ cung cấp cho bạn tất cả các tác vụ theo lịch trình tùy chỉnh mà bạn có.
SliverNinja - MSFT

2

Bạn có thể thử:

schtasks /query /FO CSV | ConvertFrom-CSV | Where { $_.TaskName -eq "myTask" } 

Thủ thuật là trong việc chuyển đổi đầu ra sang CSV trước, sau đó quay lại đối tượng powershell.


0

Bạn đang xem xét lại nó.

Dòng lệnh cho những gì bạn muốn scht task / query / s% computername% | FIND / I "% name_of_task%"

ví dụ scht task / query / s server01 | FIND / I "calendar"


-2

Các tùy chọn tốt nhất là từ Alex vì bạn không cần thư viện và bạn sẽ chuyển đổi câu trả lời của chuỗi từ các nhiệm vụ trong đối tượng Powershell.

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.