"Enter"a basıp içeriğe geçin

Removing Scheduled Task with Powershell or Command Prompt

scheduled-taskWindows işletim sistemlerinde belirlenen sürelerde çalışması gereken işlemler Scheduled task yani görev zamanlayıcı da yer alır.

Genelde uygulama güncellemeleri ve işletim sisteminin planlanan işlemlerini scheduled task kısmında görebilirsiniz.

Bir çok bilgisayarın yer aldığı bir yapıya sahipseniz scheduled task üzerindeki ekleme, silme ve güncelleme gibi işlemlerinizi komutlar üzerinden gerçekleştirmeniz işinizi kolaylaştıracaktır.

Bu yazımda daha çok zamanlanmış bir görevi silme işleminden bahsedeceğim.

Örneğin yapınızdaki bilgisayarların sürekli olarak Windows bünyesinde yer alan One Drive güncelleme görevlerini silmek isteyebilirsiniz. Çünkü bu görev belirli aralıklarla uygulamayı kontrol edecek ve arka planda OneDrive.exe şeklinde versiyonlarını indirmeye çalışacaktır.

Veya Google Earth kullanıyorsanız aynı durumla karşı karşıya kalabilirsiniz. Arka planda GoogleUpdate görevi google-earth-pro-7x.x.x.exe tarzında uygulamasını indirmeye çalışacaktır.

Bu tarz işlemler uyguladığınız politikalara aykırı olabilir veya limitli bir internet erişimine sahip olabilirsiniz. Bu nedenle aşağıdaki yöntemleri denemelisiniz.

Windows 10 VPN hatası ve çözümü için buradaki yazımı okuyabilirsiniz.

PowerShell 

Komutlar üzerinden ilerleyecekseniz öncelikle tercih edeceğiniz ortam PowerShell olmasında fayda var. Çünkü PowerShell komutları ile daha esnek ve müdahale edilebilir bir alana sahip olacaksınız.

Scheduled task için PowerShell üzerinde bir modül bulunmaktadır. Bu modülün adı uygulama ile aynı olup ScheduledTasks şeklindedir. ScheduledTasks PowerShell 3.0 ile birlikte gelip üst versiyonlarında da kullanılmaya devam etmektedir.

ScheduledTasks modülüne ait kullanabileceğiniz komutları öğrenmek için öncelikle PowerShell arabirimini açın ve şu komutu yazın:

Get-Command -Module ScheduledTasks

Bu işlem sonrası aşağıdaki gibi modülün komutlarını görebilirsiniz.

scheduled-tasks-commandBu komutlar içinden Unregister-ScheduledTask  isimli olanı görev silme işlemi için kullanacağız. Örnek olarak Google hizmetlerinin güncellemeleri için tanımlanan görevlere bakalım. Varsayılan olarak genelde Google GoogleUpdateTaskMachineCore ve GoogleUpdateTaskMachineUA şeklinde iki adet görev tanımlar. Bu görevleri silmek için:

Unregister-ScheduledTask -TaskName GoogleUpdateTaskMachineCore -Confirm:$false

Unregister-ScheduledTask -TaskName GoogleUpdateTaskMachineUA -Confirm:$false

şeklinde iki komutu da çalıştırmamız gerekir. Burada yer alan -TaskName görev adını süzmek için kullanılır.  -Confirm komutu ise bu işlem için bir onay mekanizması olmasına karşın kullanılır. Bu komuta $false değeri atandığında herhangi bir onaya tabi tutulmadan işlem gerçekleştirilir.

Benzer isimle başlayan bir çok görev olması durumunda silme işlemini tek tek komut yazmak yerine tek bir komutla işi çözebilirsiniz. Bunun için joker komutu olan *  yıldız simgesini kullanmanız gerekir. Yukarıdaki iki komutu tek satırda yapmak için:

Unregister-ScheduledTask -TaskName GoogleUpdate* -Confirm:$false

komutunu kullanabilirsiniz. Scheduled task içinde yer alan ve GoogleUpdate ile başlayan ne kadar görev varsa hepsini tek seferde silecektir.

Zamanlanmış görevleri PowerShell komutu ile silmek bu kadar basittir. Ancak asıl sorun işletim sisteminin versiyonlarında sizi bulacaktır. Yukarıda bahsettiğim komutlar PowerShell 3.0′ dan itibaren gelmektedir. Yani Windows 10 makinalarınız bu komutu destekleyecektir. Fakat Windows 7 makinalarınızda PowerShell 2.0 bulunmaktadır. ScheduledTasks modülü ise PowerShell 2.0 üzerinde bulunmamaktadır ve Install-Module veya Import-Module komutları ile yüklenememektedir.

Bu sorunun bir çözümü PowerShell 2.0 olan sürümünüzü PowerShell 5.1 versiyonları gibi üst versiyona taşımaktır. Bu işleminde kriterleri vardır. Eğer ki Windows 7 SP1 yüklü değilse bu yükseltme işlemini gerçekleştiremezsiniz. Ayrıca SP1 paketine sahip olsanız bile yükseltme işlemi oldukça zahmetlidir.

Yükseltme işleminde Install-Module ile ScheduledTasks modülünü yüklerken muhtemelen TLS sürümleri nedeniyle paketi indiremeyecek ve aşağıdaki komutu aramaya başlayacaksınız.

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Bu adımı offline installer yöntemi ile atlayabilirsiniz. Var olan bir makineden PowerShell sürümünü yükseltmek isteyebilirsiniz. Import_Module metodu ile yükleme işlemini yapabilirsiniz. Ancak bu sefer de Invalid namespace hatasına takılacaksınız. Yani işlem baya detaylı ve zor olacaktır.

Bu arada yükseltme işlemi için Microsoft’ un buradaki sayfasına bakabilirsiniz.

Bu işlem yerine Command Prompt ‘u yani komut istemcisini kullanmak daya yerinde olacaktır.

Windows üzerindeki donanımların başlatılamamasının çözümü için bu yazımı okuyabilirsiniz.

Command Prompt

Komut satırı ile de zamanlanmış görevleri silmek oldukça basittir. Üstelik işletim sistemi sürümü ile ilgili kısımlara takılmadan tüm versiyonlar üzerinde sorunsuz komutlarınız çalışır. Ancak komut isteminin de bir dezavantajı olacaktır buna birazdan değineceğim.

Benzer Google örneği için komut istemcisi üzerinden görev silmek için:

schtasks /delete /tn "GoogleUpdateTaskMachineCore" /f

schtasks /delete /tn "GoogleUpdateTaskMachineUA" /f

komutlarını kullanabilirsiniz. /tn görev adını belirlemek için kullanılan parametredir. /f ise bu komut için işlemin zorlanacağını ifade eder.

Şimdi komut istemcisinin dezavantajlı olduğu duruma gelelim. Eğer ki yukarıdaki işlemi PowerShell ‘deki gibi * yıldız joker karakteri kullanıp tek satırda yapmak istiyorsak bu mümkün olmayacaktır. Komut istemcisinde ki /tn parametresi görev adının tamamını istemektedir.

Bu sorunu çözmek için ise bir döngü şeklinde görev isimlerini araştırıp, uygun olanı /tn parametresinin sonuna eklemeliyiz. Yani ilave komutlar yazmamız gerekecektir.

Basit bir for döngüsü ile aşağıdaki gibi bu sorunun üstesinden gelebiliriz:

for /f "tokens=2 delims=\" %%x in ('SCHTASKS /QUERY /FO:LIST ^| FINDSTR "GoogleUpdate."') do SCHTASKS /DELETE /F /TN "\%%x"

Yukarıdaki komut zamanlanmış görevler içinden GoogleUpdate ile başlayan görevler için bir liste oluşturacaktır. Ve bu listede yer alan görevleri teker teker silecektir.

SCHTASKS /QUERY /FO:LIST zamanlanmış görevlerin listesini oluşturur. FINDSTR görevler içinde belirtilen kritere göre arama yapacaktır. Bulunan görev isimleri /tn komutu ile silinecektir.

Dilerseniz görevleri silmek yerine pasife de alabilirsiniz. Sadece ilgili parametreleri değiştirmeniz gerekir. Önemli olan kısım ise komut istemcisini yönetici modunda çalıştırmanız gerektiğidir.

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir