Windows Görev Zamanlayıcı'da çıkış koduna göre hareket etme


1

Aşağıdaki .bat betiğine sahibim:

set /a num=%random% %%2
exit /b %num%

Bu toplu iş komut dosyasını, Windows Görev Zamanlayıcı'da çıkış kodu 1 olduğunda, Görev Zamanlayıcı komut dosyasının başarısız olduğu bir e-posta gönderecek şekilde yürütmek istiyorum.

Olayları izleyen farklı bir görev oluşturabilirim, ancak yarasa komut dosyasının çıkış kodunu temel alan olaylar arasında herhangi bir fark göremiyorum.

Tarih kodunun çıkış kodu = 0 ve = 1 için nasıl göründüğü budur.

görüntü tanımını buraya girin

Arasındaki fark exit 0ve exit 1eventId = 201 sıra çıkış kodu ne olduğunu söyleyerek bir not olmasıdır.

Yanıtlar:


2

Görev Zamanlayıcı ile ilgili sorun, hangi çıkış kodunun döndürüldüğünün önemi yoktur, görev her zaman bir Olay Kimliği 201 kaydeder - İşlem Tamamlandı ... doğru olan ... ne olursa olsun, çalıştırılan iş dahili olarak başarısız olsa bile görev tamamlandı .

Daha ileriye bakıldığında, günlüğe kaydedilen Olayı görüntülerken Ayrıntılar sekmesine tıklayarak, ayarların doğru ResultCodeyapıldığını görebiliriz EventData. Yani bunu GUI'ye göre filtrelemek basit bir iştir? .... peki hayır ... EventID'nin ötesinde bir filtre yoktur. Şimdi üzerinde tetiklemek için özel bir Olay filtresi yazmak zorundayız ResultCode. İhtiyacımız olan XML XPath sorgusu şudur:

<QueryList>
  <Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
    <Select Path="Microsoft-Windows-TaskScheduler/Operational">
      *[System[(Level=4 or Level=0) and (EventID=201)]]
        and
      *[EventData[Data[@Name='ResultCode'] and (Data='2147942401')]]</Select>
  </Query>
</QueryList>

Yani onu parçalamak için istiyoruz:

Event log: Microsoft-Windows-TaskScheduler/Operational
Event Level: 4 or 0 = Information
Event ID: 201
And
Event Data: ResultCode = 2147942401

Bozuk çıkış kodunu 1 olarak ayarlarsak neden ResultCode = 2147942401? çünkü aslında ondalık olan 0x1onaltılık 0x80070001olanı döndürür 2147942401. Bu nedenle, "Doğru" Sonuç kodunu almak için etkinliğinizi bulmanız ve Ayrıntılar sekmesini tıklamanız, ardından filtrelenecek "Doğru" ResultCode öğesini bulabilmeniz gerekir.


Bu cevabı çok oy kullanıyorum çünkü oy veriyorum, ancak programatik olarak "Olayın Ayrıntıları" na nasıl bakacağımı söyleyemiyor, öyle ki sistematik olarak başarısız senaryo üzerinde çalışabilirim. BTW: Son zamanlarda daha fazla esnekliğe sahip olmak için VisualCron'a geçtim, bu yüzden bu soru artık benim için ilgi çekici değil.
Michael Potter,

Haklısınız, gönderiyi, gerekli ek bilgileri almak için "Ayrıntılar" sekmesine bakmanız gerektiğini açıklığa kavuşturmak için düzenledim.
HAL9256

Üzgünüm, yorumum belli değildi. Bu iyi cevabı doğru cevap olarak işaretlememe itirazımın önemli kısmı, bunu programlı olarak yapmak istememdi. Şöyle ki: bu çıkış kodunu temel alan bir komut dosyasını çalıştırın; sadece gözlerime bakmakla değil.
Michael Potter
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.