Powershell Kullanarak Windows Bilgisayar Hızlandırma son zamanlarda birçok kişi tarafından araştırılmaktadır. Windows bilgisayarların yavaşlaması durumunda onları hızlandırmak için halihazırda pek çok yöntem bulunmaktadır. Bu yöntemler manuel dosya temizliği, Windows içine yerleşik olan Disk Temizleyici ve Disk Kontrol uygulamaları, üçüncü parti uygulamalar ve Komut İstemi olarak bilinir. Ancak bunlara ek olarak bir yöntem daha vardır ki, o da Windows’un Komut İstemi alternatifi olan Windows Powershell’dir. Powershell komutlarıyla basit ve hızlı bir şekilde Windows bilgisayarlar temizlenip hızlandırılabilir, üstelik bu yöntem genel olarak Komut İstemi’nden aşina olunmuş kodlar ile yapılabilmektedir.
Bu yazıda Windows Powershell’i kullanarak bilgisayar hızlandırma yöntemlerine geçmeden önce, Powershell’deki olasılıklarınızın Komut İstemi’ne kıyasla biraz daha fazla olduğunu belirtelim.
Powershell Nedir?
Powershell Kullanarak Windows Bilgisayar Hızlandırma yöntemimize geçmeden önce Powershell Nedir onu tanıyalım. 2002 yılında Monad adıyla piyasaya çıkan ve 2006 yılında Powershell adına kavuşan Windows Powershell, NET tabanlı bir komut istemi çekirdeğidir. Powershell, DOS bazlı öncülü Komut İstemi’ne nazaran daha güçlü komutlar yazma yeteneğine sahiptir, ve tıpkı normal bir programlama diline (özellikle akranı C#) daha çok benzeyen bir sözdizimine sahiptir. Kullanıcılar Powershell komutlarını cmdlet’ler aracılığıyla çalıştırır ve kullanıcılar Powershell’in cmdlet sözlüğünde izin verilen sözcükleri kullanarak kendi cmdlet’lerini yazıp çalıştırabilir.
Powershell’in Komut İstemi’ne karşı en önemli avantajlarından birisi de, özellikle Windows’un yakın geçmişte çıkmış sürümlerinde Powershell uygulamaları geliştirmek için özel bir uygulama (Powershell ISE) bulunmasıdır. Bunun yanında Powershell’in .NET Core bazlı platformlar arası bir sürümü de bulunmaktadır, dolayısıyla bu yazıdaki bazı komutların Linux işletim sisteminde de çalışması mümkündür (Powershell Core üzerinde yazılır ise).
Powershell İle Çöp Dosya Temizliği
Powershell ile sistemdeki çöp dosyaların temizliği, yazının başında belirtildiği gibi CMD komutlarıyla yapılabilmektedir, ancak bu başlık altında Powershell’in özgün komutlarıyla nasıl çöp dosya temizliği yapılacağı anlatılacaktır.
Powershell sözdizimiyle çöp dosya temizliği aşağıdaki kod satırları ile yapılmaktadır:
- Remove-Item $env:TEMP* -Recurse -Force -ErrorAction SilentlyContinue
- Remove-Item $env:SystemDrive*.tmp -Recurse -Force -ErrorAction SilentlyContinue
- Remove-Item $env:SystemDrive*.chk -Recurse -Force -ErrorAction SilentlyContinue
- Remove-Item $env:SystemDrive*.old -Recurse -Force -ErrorAction SilentlyContinue
- Remove-Item $env:SystemDrive*.log -Recurse -Force -ErrorAction SilentlyContinue
- Remove-Item $env:USERPROFILE\recent* -Recurse -Force -ErrorAction SilentlyContinue
Powershell sözdiziminde, CMD’de kullanılan “del” komutunun karşılığı “Remove-Item” olarak karşımıza çıkmaktadır. Bu komut dizin ve bazı argümanlar alarak çalışır. Birden fazla dosya temizlenecekse bu işlemin sorunsuz yapılması için “-Recurse” argümanı gerekmektedir. “-Force” argümanı ise herhangi bir durumda Powershell programı aracılığıyla işletim sistemini o dosyayı silmeye zorlayacaktır (sistem dosyalarında işe yaramamaktadır).
Bu örnekteki komutların en sonundaki “-ErrorAction SilentlyContinue” argümanı ise, zorlamaya rağmen dosyalar silinemezse hatayı kullanıcıya döndürmemesi komutunu verir, bu sayede bu işlem esnasında hata mesajı çıkmaz.
“$env:KONUMDEĞİŞKENİ” olarak belirtilen dizinler ise bilgisayarın sistem ortam değişkenlerinde kayıtlı olan sistem dosya komutları (Temp, C dizini ve kullanıcı dosyası) olup bu komutlar aracılığıyla bilgisayara bu dizinlerdeki dosyaların silinmesi komutunu verir, bu şekilde sistem çöp dosyalarının temizliği gerçekleşir.
Tıpkı Komut İsteminde olduğu gibi, Powershell’de de Windows klasöründeki çöp dosyaların temizliği yapılabilmektedir, ancak bundan önce programın Yönetici yetkisi ile çalışıp çalışmadığının program tarafından bilinmesi gerekir. Bu yetkinin kontrolü şu kod satırıyla yapılır:
- $isAdmin = [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains ‘S-1-5-32-544’
Daha sonra bu değişkenin değeri kontrol edilip aşağıdaki kod bloğuyla Windows klasöründeki çöp dosyaların temizliği yapılabilir:
if($isAdmin -eq $true)
{
Remove-Item $env:windir\Temp* -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item $env:windir\Prefetch* -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item $env:windir*.bak -Recurse -Force -ErrorAction SilentlyContinue
}
Powershell’deki “if” koşulu yukarıdaki kod bloğunda “if($değişken -karşılaştırma takısı $bool)” şeklinde yapılmıştır. Bu koşuldaki $true değeri, Powershell’deki evrensel olumlu boolean değeridir, bunun aksi de evrensel olumsuz boolean değeri olan $false’dır. Yukarıdaki kod bloğuna göre $isAdmin’in olumlu bool değerini tuttuğu kanıtlanırsa “$env:windir” (C:\Windows) dizini altındaki çöp dosya klasörleri (Temp ve Prefetch) ile bu klasördeki “.bak” dosyaları temizlenir, bu şekilde sistem dizininde çok daha kapsamlı bir çöp dosya temizliği yapılmış olur.
Çöp dosya temizliği, bilgisayar hızlandırma işleminin ilk adımıdır ve Powershell, yukarıda görüldüğü gibi bu konuda gelişmiş çözümler sunmaktadır.
Powershell İle RAM kullanımını optimize etme
Powershell ile işletim sisteminin RAM (Rastgele Erişimli Bellek) kullanımı optimize edilebilmektedir. Bunun için sadece iki satırlık bir kod bloğu yeterli olacaktır ve bu kod bloğu hem Komut İstemi’nde hem Powershell’de aynı şekilde yazılmaktadır:
- Fsutil behavior query memoryusage
- Fsutil behavior set memoryusage 2
Bu kodlar kullanılarak işletim sistemindeki NTFS’nin (Windows NT Dosya Sistemi) dosya atama tablosu (FAT) üzerinde atanabilen havuz bellek oranı “query memoryusage” ile getirilip “set memoryusage 2” ile yükseltilir. Bu komut sayesinde bilgisayar performansı kısmi olarak artabilir, ancak değişikliklerin etkili olabilmesi için bilgisayarın yeniden başlatılması gerekir.
İşletim Sistemindeki Gereksiz Paketleri (Bloatware) Silme
Windows işletim sisteminin yakın tarihte çıkan versiyonları, işletim sisteminde standart olarak gelen ancak çoğu kullanıcının kullanmadığı yazılımlar bulundurur, bu yazılımlar işletim sistemlerini şişirdiği için bunlara “bloatware” denir. Bu yazılımların silinmesinin Windows işletim sisteminde yerleşik olarak bulunan iki yolu vardır:
- Birincisi Program Ekle Ve Kaldır’dan bu programları bulup tek tek silmek, ikincisi ise Powershell.
- İlk yöntem her bloatware için işe yaramayacağından dolayı Powershell bu konuda daha etkin bir çözüm olacaktır, bu da Powershell’i aynı zamanda Komut İstemi’ne de nazaran avantajlı ve güçlü kılmaktadır.
Bunu yapmak için öncelikle (eğer sistem gerekli görür ise) admin yetki kontrolü yapıp programı Powershell’den admin yetkisiyle çalıştırıyor olmanız gerekecektir. Daha sonra, işletim sisteminizde istemediğiniz her paket için sırayla şu komutu yazmanız gerekir:
- Get-AppxPackage -AllUsers Microsoft.paketNumarası/paketAdı | Remove-AppxPackage;
Eğer işletim sisteminizden hangi paketi sileceğiniz konusunda kararsız iseniz, Program Ekle Ve Kaldır’dan silmek istediğiniz programları bulun, daha sonra regedit’i (Kayıt Defteri Düzenleyicisi) açıp “Bilgisayar\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications” konumundan o pakedin sistemdeki kayıtlı kod adını bulmanız gerekir. Kod adı numaralı olan paketlerin için İnternette arama yapabilir ve o paketin size gerekli olup olmadığına karar verdikten sonra, eğer gerekli değil ise yukarıdaki kod satırını kullanarak o pakedi silebilirsiniz.
Powershell’de Komut İstemi (CMD) Komutları
Yazının başlarında da belirtildiği üzere Powershell’in Komut İstemi’ne karşı en önemli avantajlarından birisi, Komut İstemi’nde kullanılan komutların Powershell’de de aynen kullanılabileceğidir. Dolayısıyla eğer Komut İstemi üzerinde bir dosya silme, servis kapatma veya İnternet hızlandırma işlemi için arama yapıp bu işlemi yapacak uygun kodu bulduysanız bu kod Powershell’de de aynen çalışacaktır. Dahası, Powershell uygulamaları geliştirmek için kullanılan Powershell ISE adlı script yazma ortamında da bu komutlar sözdizimleriyle beraber tanınıyor olacak ve tıpkı bir Komut İstemi yazar gibi (ancak duruma ve eklediğiniz komutlara göre daha güçlü) komut betiği programları yazıyor olacaksınız. Örneğin Komut İstemi’nde servis kapatma komutu aşağıdaki gibidir:
- sc config servisAdı start=disabled
Bu komut, Komut İstemi’nde çalıştığı gibi Powershell ISE’de de aynen bu şekilde sözdizimine göre renklendirmelerle tanınacak ve Powershell dosyaları (.ps1 uzantılı komut betikleri) tarafından da sorunsuz bir şekilde çalıştırılacaktır. Dolayısıyla Komut İstemi’nde kullandığınız ne kadar komut var ise, hangi komut olduğu fark etmeksizin bu komutları Powershell’de de çalıştırabilir, biraz ekleme yaparak Komut İstemi’ne nazaran çok daha programcı dostu ve zengin programlar yazabilirsiniz.
Powershell Dosyalarının Kaydı
Komut İstemi genelde .bat dosya uzantısı ile anılmakta iken, Powershell komut dosyaları .ps1 uzantısı ile gelir. Powershell üzerinden .bat dosyaları çalıştırılabilmektedir, ancak Powershell’in CMD komut desteği sayesinde bu tür bir uygulamaya gerek kalmamaktadır.