Schtasks kullanarak planlanmış bir görevin durumunu nasıl alabilirim?


3

Bunu çalıştırdığımda:

schtasks.exe /query  /tn "GoogleUpdateTaskMachineUA"

Bunu anladım:

Folder: \
TaskName                                 Next Run Time          Status
======================================== ====================== ===============
GoogleUpdateTaskMachineUA                N/A                    Disabled

Sadece Durumu almanın bir yolu var mı?

Yanıtlar:


4

Gerçekten kullanmak zorunda olmadığınız sürece schtasks.exe, tüm üstün çıktı ve biçimlendirme seçenekleriyle PowerShell'i kullanın:

Get-ScheduledTask | ? TaskName -eq GoogleUpdateTaskMachineUA | Select State | ft -AutoSize

veya

(Get-ScheduledTask | Where TaskName -eq GoogleUpdateTaskMachineUA ).State

3

Sadece Durumu almanın bir yolu var mı?

Aşağıdaki komutu kullanın:

for /f "usebackq skip=3 tokens=4" %a in (`schtasks.exe /query /tn "GoogleUpdateTaskMachineUA"`) do @echo %a

Notlar:

  • skip=3 - başlık satırlarını yoksay
  • tokens=4 - 4. jetonu al (durum sütunundaki değer)
  • Bir toplu iş dosyasında kullanmak %aiçin%%a

Örnek kullanım:

F:\test>schtasks.exe /query  /tn "GoogleUpdateTaskMachineUA"

Folder: \
TaskName                                 Next Run Time          Status
======================================== ====================== ===============
GoogleUpdateTaskMachineUA                03/02/2016 12:17:00    Ready

F:\test>for /f "usebackq skip=3 tokens=4" %a in (`schtasks.exe /query /tn "GoogleUpdateTaskMachineUA"`) do @echo %a
Ready

Daha fazla okuma

  • Windows CMD komut satırının AZ Dizini - Windows cmd satırının ilgili olduğu her şey için mükemmel bir referans.
  • for / f - Başka bir komutun sonuçlarına karşı döngü komutu.
  • schtasks - Bir Zamanlanmış İş / Görev oluştur / düzenle. İş yerel veya uzak bir bilgisayarda oluşturulabilir.

Bunu denedim. Sadece isimsiz görev için iyi çalışır space. Görev adında boşluklar varsa, bu çalışmaz. Henüz denenmedi, ancak tokensçıktıdaki boşlukları sayarak değerleri ayarlamaya çalışırsam işe yarayabilir .
Sandeep,


Teşekkürler, bu işe yarıyor. Zamanlanmış görevinizde boşluk varsa, yalnızca belirteçlerin sayısını ayarlayın, örneğinfor /f "usebackq skip=3 tokens=7" %a in (`schtasks.exe /query /tn "Refresh Dashboard Cache"`) do @echo %a
wp78de


2

Ayrıntılı çıktı ve liste formatı için seçenek schtasks /queryile deneyin . Ardından komut ile sonuçları filtreleyin ./v/fo listfind

schtasks /query /tn "GoogleUpdateTaskMachineUA" /v /fo list | find "Status:"

Böyle dize olsun

Status:         Running

Durum kullanma forkomutunun değerini çıkarmak için :

for /f "delims=: tokens=2" %a in ('schtasks /query /tn "GoogleUpdateTaskMachineUA" /v /fo list ^| find "Status:"') do @echo %a
  • Toplu iş dosyasında kullanmak %aiçin%%a
  • Gibi simgeleri kaçmak için |ya >içinde forkomut kullanımı^

0

Windows 7 kullanarak bir Powershell betiği yazıyorsanız ve kullanamıyorsanız Get-ScheduledTask, şunları düşünebilirsiniz:

$status = ((schtasks /query /S 'yourServer' /TN yourTask)[4] -split ' +')[2]

Bu gibi görünüyor:

### Running this:
schtasks /query /S 'yourServer' /TN yourTask
### Leads to the output below.

Folder: \
TaskName                                 Next Run Time          Status         
======================================== ====================== ===============
yourTask                                 N/A                    Running   

### Running this:
$status = ((schtasks /query /S 'yourServer' /TN yourTask)[4] -split ' +')[2]
Write-Host "$($status)"
### Leads to the output below

Running

0

Buna iyi bir cevap aradım ve beni yaklaştıran bazı şeyler buldum. Sonunda geldiğim şey şu.

$taskName="SomeTask"
$serverName="yourserver"
$status = (schtasks.exe /query /tn "$taskName" /s $serverName /v /fo CSV | ConvertFrom-Csv | Select-Object -Property "Status").Status

Görevdeki tüm öğeleri istiyorsanız, aşağıdakine benzer bir şey yapabilirsiniz ...

$task= schtasks.exe /query /tn "$taskName" /s $serverName  /v /fo CSV | ConvertFrom-Csv | Select-Object

Ardından çalışmak istediğiniz hangi özelliği seçebilirsiniz ...

$task.Status
$task."Last Result"

Özelliklerin çevresindeki boşlukları içeren tırnak işaretlerini kullanmayı unutmayın!

Açıklığa kavuşturmak için cevabım Get-ScheduledTask kullanılamadığında Powershell kullanıyor, bu Windows 7 veya Windows Server 2008 kullanıyor olsaydı olmazdı. anlamak ve birlikte çalışmak daha kolay. Hatta daha çok kimse Kısacası, cevabım çözümdür. Mülkiyet içinde olur hangi sütunun ayrıştırmak zorunda kalmadan zamanlanmış görev diğer özelliklerini edinmek isteyen olabilir eğer ben arıyordum, bu yüzden ben paylaşmak düşündüm Diğer düşünen bireyler için.


(1) Bu PowerShell, değil mi? Soru (ve cevapların çoğu) CMD'ye değindiğinde, cevabınızın PowerShell kullandığını açıkça belirtmek güzel. (2) Birkaç tane PowerShell cevabı var; kullanan bir Get-ScheduledTaskve kullanan bir (schtasks /query …) -split. Cevabınız onlardan daha iyi nasıl? Lütfen yorumlara cevap vermeyin;  cevabınızı daha net ve daha eksiksiz hale getirmek için düzenleyin .
Scott

0

Aşağıdakiler, adlarında boşluk bulunan taş isimler için de geçerlidir:

for /f "tokens=3 delims=," %a in ('schtasks.exe /query /tn "GoogleUpdateTaskMachineUA" /fo csv /nh') do echo %~a

Bir csv ( c omma nın oluşturduğu v alues ) ( /format csv) çıktığımızda ve kullandıkça delims=,, boşluklar artık önemli değil. /nh"anlamına gelir , n O h eader", yani gerek skip=.


-1

Çıktı formatını CSV olarak değiştirmek /fo csviçin schtaskskomuta ekleyin .

Ardından , gerekli sütunu argümanla filtrelemek ve alan adı kaydını ile atlamak için CSVFix'i kullanın .-f 3-ifn

schtasks.exe /query /tn "GoogleUpdateTaskMachineUA" | csvfix order -ifn -f 3
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.