Daftar pertanyaan menggunakan Powershell

8

Pada mesin Windows7 saya mencoba saya dapat menjalankan kueri untuk melihat semua tugas yang dijadwalkan menggunakan schtasks.exe

Ini bagus tapi saya juga ingin memfilter set hasil menggunakan sesuatu seperti

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

Masalahnya adalah saya tidak schtasks ini mengembalikan daftar diformat dengan benar untuk fungsi mana untuk bekerja.

Saya juga sudah mencoba:

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

itu juga tidak bekerja.

Apa yang akan menjadi cara terbaik untuk meminta schtasks di komputer lokal menggunakan Win7 dan dapat menyaringnya

jdiaz
sumber
Ada apa dengan garis miring terbalik di sana? Saya cukup yakin bukan itu yang schtasksdiharapkan di sana, melainkan tebasan ke depan.
Joey
Ha! kamu benar. Saya sudah memperbaikinya di atas
jdiaz

Jawaban:

8

Anda bisa mencoba menggunakan schtasks, yang akan membuat Anda menguraikan teks. Ini hampir selalu rawan kesalahan, dan jelas lebih sulit daripada mengambil output dari suatu perintah.

Ada modul TaskScheduler di PowerShellPack . Setelah Anda menginstal paket PowerShell, untuk mendapatkan semua tugas yang dijadwalkan, gunakan:

Import-Module TaskScheduler
Get-ScheduledTask -Recurse

Karena ini adalah objek nyata, untuk menemukan tugas dengan nama tertentu, Anda dapat menggunakan:

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

Secara umum, Anda akan menemukan bahwa komunitas PowerShell telah mengambil lebih banyak kesulitan untuk menggunakan baris perintah, seperti schtasks, dan mengubahnya menjadi cmdlet yang mudah digunakan, seperti Get-ScheduledTask.

Lihat juga:

Mengirim Email Otomatis menggunakan Modul TaskScheduler

Semoga ini membantu

Mulai Otomatis
sumber
1
Ini berfungsi baik jika Anda menggunakan kotak Win2k8 (atau vista / W7). Sayangnya, itu tidak berfungsi dengan server W2k3 (yang masih sangat umum di lingkungan saya).
Mike Shepard
@ MikeShepard Jika Anda menginginkan mainan baru, Anda harus berhenti menggunakan sistem operasi berusia 11 tahun.
Ryan Ries
1
Itulah kisah karier saya. :-(
Mike Shepard
2

jika Anda tidak perlu melakukannya di PowerShell maka yang berikut ini akan berfungsi

schtasks / query | findstr / i "mytask"

ps versi
schtasks / query | ? {$ _ -seperti 'mytask'}

tony roth
sumber
sampel kode sumber lengkap untuk membuat, meminta dan menghapus tugas menggunakan PS?
Kiquenet
2

Inilah posting blog yang saya tulis tentang melakukan ini. Pada dasarnya, saya mengambil output dari / FO LIST / V, menulis itu ke file, dan mengimpornya kembali sebagai objek menggunakan import-csv

Mike Shepard
sumber
2
Anda berada di jalur yang benar tetapi menulis ke file sementara tidak perlu di sini: schtasks /query /fo csv /v|convertfrom-csvberfungsi dengan baik
Joey
ini rapi tetapi masih tidak mudah
ditanyakan
Johannes: Anda benar, tetapi saya benar-benar (benar-benar) tidak menyukai properti yang memiliki spasi / titik dua / garis miring. jdiaz: Apa yang tidak bisa ditanyakan? Script yang saya posting dan revisi Johannes keduanya mengembalikan objek PowerShell asli dengan properti. Mereka harus sama queryable seperti entitas PowerShell lainnya.
Mike Shepard
1
Sungguh - mereka dapat diminta ... schtasks /query /fo csv /v /s "myserver" | convertfrom-csv | Select TaskName, "Last Run Time", Author | ? {$_.Author -notmatch "microsoft|N/A|Author"}akan memberi Anda semua tugas terjadwal khusus yang Anda miliki.
SliverNinja - MSFT
2

Anda dapat mencoba:

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

Caranya adalah dalam mengkonversi output ke CSV terlebih dahulu, dan kemudian kembali ke objek PowerShell.

Alex
sumber
0

Anda terlalu memikirkannya.

Commandline untuk apa yang Anda inginkan schtasks / query / s% computername% | FIND / I "% name_of_task%"

contoh schtasks / query / s server01 | FIND / I "schedule"


sumber
-2

Pilihan terbaik adalah dari Alex karena Anda tidak perlu pustaka dan Anda akan mengonversi jawaban string dari schtasks di objek Powershell.

Juan Andres Ramirez
sumber