PowerShell, Windows için güçlü bir otomasyon aracıdır ve dosya sistemi yönetimi için son derece yararlıdır. Özellikle bir dizinin boyutunu alma konusunda, GUI’yi kullanmaktan çok daha detaylı ve esnek bilgiler sağlar. Bu makale, temel komutları kullanmaktan, boyut birimlerini dönüştürmeye, alt dizinler dahil toplam boyutu adım adım alma işlemine kadar PowerShell kullanarak bir dizinin boyutunu nasıl alabileceğinizi tanıtır.
Temel Komutları Kullanma
PowerShell’de bir dizinin boyutunu almanın en temel yolu, Get-ChildItem
komutunu Measure-Object
komutu ile birleştirmektir. Bu kombinasyon, belirtilen dizin içindeki toplam dosya boyutunu hesaplamanıza olanak tanır.
İşte belirli bir dizinin boyutunu alma örneği komutu (burada “C:\ExampleDirectory”).
Get-ChildItem C:\ExampleDirectory -Recurse | Measure-Object -Property Length -Sum
Get-ChildItem C:\ExampleDirectory -Recurse
: Belirtilen dizin ve alt dizinlerindeki tüm öğeleri listeler.Measure-Object -Property Length -Sum
: Listelenen dosyaların boyutunu (Uzunluk özelliği) toplar.
Bu komut, belirtilen dizindeki tüm dosyaların toplam boyutunu bayt cinsinden döndürür. Ancak, bu yöntem dizinin kendisinin boyutunu içermez ve boyut birimlerini dönüştürmez. Sonraki bölüm, boyut birimlerini nasıl dönüştüreceğinizi açıklayacaktır.
Boyut Birimlerini Dönüştürme
PowerShell’de elde edilen dizin boyutu varsayılan olarak bayt cinsindendir. Bunu daha okunabilir bir formata, örneğin KB, MB veya GB’ye dönüştürmek için hesaplamalar yapmanız gerekir. Aşağıdaki betik, boyut birimlerini en uygun formata otomatik olarak nasıl dönüştüreceğinizi ve değeri nasıl göstereceğinizi gösterir.
# Belirli bir dizinin boyutunu alma
$sizeBytes = (Get-ChildItem C:\ExampleDirectory -Recurse | Measure-Object -Property Length -Sum).Sum
# Birimleri dönüştürme fonksiyonu
function Convert-Size($bytes) {
if ($bytes -gt 1GB) {
"{0:N2} GB" -f ($bytes / 1GB)
} elseif ($bytes -gt 1MB) {
"{0:N2} MB" -f ($bytes / 1MB)
} elseif ($bytes -gt 1KB) {
"{0:N2} KB" -f ($bytes / 1KB)
} else {
"{0} Bayt" -f $bytes
}
}
# Sonucu gösterme
$convertedSize = Convert-Size -bytes $sizeBytes
Write-Output "C:\ExampleDirectory'nin toplam boyutu $convertedSize"
Bu betik önce Get-ChildItem
ve Measure-Object
‘i kullanarak dizinin toplam boyutunu bayt cinsinden alır. Sonra, bu boyutu Convert-Size
fonksiyonuna geçirerek okunabilir bir birime dönüştürür. Bu fonksiyon, verilen boyutun GB, MB veya KB’ye daha uygun olup olmadığını belirler ve boyutu o birimde formatlar. Son olarak, dönüştürülmüş boyutu içeren bir mesaj çıktı verilir.
Bu yöntem, büyük dosya boyutları için bile sonuçları kolay anlaşılır bir formatta almanızı sağlar.
Alt Dizinler Dahil Toplam Boyutu Alma
PowerShell kullanarak belirli bir dizinin boyutunu alırken, genellikle o dizin içindeki alt dizinlerin boyutunu da hesaplamak önemlidir. Bu toplam boyut hesaplama, sunucu depolamasını yönetmede veya verileri düzenlemede yardımcı olabilir. Aşağıdaki adımlar ve kod parçacığı, alt dizinler dahil bir dizinin toplam boyutunu nasıl alabileceğinizi gösterir.
# Hedef dizin
$directoryPath = "C:\ExampleDirectory";
# Dizin boyutunu hesaplama
$directorySize = Get-ChildItem $directoryPath -Recurse | Where-Object { -not $_.PSIsContainer } | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue
# Boyut birimi dönüştürme
function Convert-Size($bytes) {
switch ($bytes) {
{ $_ -gt 1GB } { "{0:N2} GB" -f ($bytes / 1GB); break }
{ $_ -gt 1MB } { "{0:N2} MB" -f ($bytes / 1MB); break }
{ $_ -gt 1KB } { "{0:N2} KB" -f ($bytes / 1KB); break }
Default { "$bytes Bayt" }
}
}
# Sonucu gösterme
$convertedSize = Convert-Size -bytes $directorySize.Sum
Write-Output "$directoryPath'nin toplam boyutu $convertedSize"
Bu betik önce, belirtilen dizindeki tüm dosya ve alt dizinleri rekürsif olarak listelemek için Get-ChildItem
komutunu kullanır. Ardından, sadece dosyaları filtrelemek için Where-Object
cmdlet’ini kullanır ve Measure-Object
ile toplam boyutlarını hesaplar. Erişim hakları gibi nedenlerle bir hata oluşursa betiğin durmasını önlemek için -ErrorAction SilentlyContinue
parametresi kullanılır.
Daha sonra, daha önce bahsedilen Convert-Size
fonksiyonu kullanılarak bayt cinsinden elde edilen toplam boyut daha okunabilir bir formata dönüştürülür. Son olarak, dizinin yolu ile dönüştürülmüş boyut çıktı olarak verilir, toplam boyut açıkça gösterilir.
Bu yöntem, büyük veri setlerine veya çok sayıda alt dizine sahip dizinlerin toplam boyutunu kolayca anlamanızı sağlar.
Belirli Dosya Türlerinin Boyutunu Hesaplama
Belirli dosya türlerinin boyutunu hesaplamak, verileri düzenlemek veya depolamayı optimize etmek için yararlı olabilir. Örneğin, günlük dosyaları veya resim dosyaları önemli miktarda alan kaplayabilir ve bu dosyaların boyutunu bilmek, gereksiz dosyaları silmeyi veya arşivlemeyi düşünmenize yardımcı olabilir. Aşağıda, belirli dosya türlerinin (örn. “.log” dosyaları) toplam boyutunu hesaplamak için PowerShell’i nasıl kullanabileceğiniz açıklanmaktadır.
# Hedef dizin
$directoryPath = "C:\ExampleDirectory";
# Hedef dosya türü
$fileExtension = "*.log";
# Dosya türü boyutunu hesaplama
$fileSize = Get-ChildItem $directoryPath -Filter $fileExtension -Recurse | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue
# Boyut dönüştürme fonksiyonu
function Convert-Size($bytes) {
switch ($bytes) {
{ $_ -gt 1GB } { "{0:N2} GB" -f ($bytes / 1GB); break }
{ $_ -gt 1MB } { "{0:N2} MB" -f ($bytes / 1MB); break }
{ $_ -gt 1KB } { "{0:N2} KB" -f ($bytes / 1KB); break }
Default { "$bytes Bayt" }
}
}
# Sonucu gösterme
$convertedSize = Convert-Size -bytes $fileSize.Sum
Write-Output "$directoryPath içindeki $fileExtension dosyalarının toplam boyutu $convertedSize"
Bu kod, belirtilen uzantıya sahip dosyaları rekürsif olarak aramak için Get-ChildItem
cmdlet’ini kullanır. -Filter
parametresi, sadece belirli bir türdeki dosyaların hedeflenmesini sağlar. Ardından, bu dosyaların toplam boyutunu hesaplamak için Measure-Object
cmdlet’i kullanılır ve daha önce bahsedilen Convert-Size
fonksiyonu tarafından okunabilir bir birime dönüştürülür.
Bu yöntem, depolamada belirli bir dosya türünün ne kadar alan kapladığını doğru bir şekilde anlamanıza yardımcı olur, bu da depolama yönetimi kararlarında size yardımcı olur.
Sonuçları Bir Dosyaya Çıktı Alma
Dizin boyutu analizi sonuçlarını bir dosyaya kaydetmek, rapor oluşturma veya gelecekte referans için yararlı olabilir. Bu bölüm, elde edilen dizin boyutları hakkındaki bilgileri bir metin veya CSV dosyasına çıktı olarak almak için PowerShell’i nasıl kullanabileceğinizi tanıtır. Bu, verileri görselleştirmeyi ve paylaşmayı kolaylaştırır.
Metin Dosyasına Çıktı
# Hedef dizin
$directoryPath = "C:\ExampleDirectory";
# Çıktı dosyası yolu
$outputFilePath = "C:\directorySizeReport.txt";
# Dizin boyutunu alma
$sizeBytes = (Get-ChildItem $directoryPath -Recurse | Measure-Object -Property Length -Sum).Sum
# Boyut birimlerini dönüştürme
$convertedSize = Convert-Size -bytes $sizeBytes
# Sonucu bir dosyaya yazma
"$directoryPath'nin toplam boyutu $convertedSize" | Out-File $outputFilePath
CSV Dosyasına Çıktı
Birden fazla dizinin boyutlarını karşılaştırmak istiyorsanız, CSV dosyasına çıktı almak özellikle yararlıdır. Aşağıdaki örnek, birden fazla dizinin boyutlarını hesaplar ve her sonucu bir CSV dosyasına kaydeder.
# Hedef dizinler listesi
$directoryPaths = @("C:\ExampleDirectory", "D:\AnotherDirectory");
# Çıktı CSV dosyası yolu
$outputCsvPath = "C:\directorySizeReport.csv";
# Sonuçlar dizisini başlatma
$results = @()
foreach ($path in $directoryPaths) {
$sizeBytes = (Get-ChildItem $path -Recurse | Measure-Object -Property Length -Sum).Sum
$convertedSize = Convert-Size -bytes $sizeBytes
$results += [PSCustomObject]@{
"Dizin" = $path
"Boyut" = $convertedSize
}
}
# Sonuçları CSV'ye çıktı alma
$results | Export-Csv $outputCsvPath -NoTypeInformation
Bu betikler, dizin boyutları analizi sonuçlarını belgelemeyi ve kaydetmeyi kolaylaştırır. Metin veya CSV dosyalarına çıktı alma işlevselliği, yönetim görevlerinin şeffaflığını artırır ve gelecekteki veri analizi veya rapor oluşturma işlemlerini destekler.
Uygulama: Dizin Boyutlarını Düzenli Olarak İzlemek İçin Betikleri Kullanma
Dizin boyutlarını düzenli olarak izlemek, ani veri artışlarını erken tespit etmek ve depolama kapasitesi ile ilgili sorunları önlemek için önemlidir. PowerShell betiklerini zamanlanmış görevlerle birleştirerek, bu süreci otomatikleştirebilirsiniz. Aşağıda, belirli bir boyutu aştığında uyarı veren dizin boyutlarını düzenli olarak izleyen bir betik oluşturma işlemi açıklanmaktadır.
Adım 1: PowerShell Betiği Oluşturma
İlk olarak, bir dizinin boyutunu kontrol eden ve belirli bir eşiği aştığında uyarı veren bir PowerShell betiği oluşturun.
# Hedef dizin ve eşik ayarlama
$directoryPath = "C:\ExampleDirectory";
$thresholdSizeGB = 10
# Dizin boyutunu alıp eşikle karşılaştırma
$sizeBytes = (Get-ChildItem $directoryPath -Recurse | Measure-Object -Property Length -Sum).Sum
$sizeGB = $sizeBytes / 1GB
if ($sizeGB -gt $thresholdSizeGB) {
Write-Warning "Uyarı: $directoryPath boyutu $thresholdSizeGB GB eşiğini aştı. Güncel boyut $sizeGB GB.";
}
Adım 2: Betiği Zamanlanmış Görevlere Ekleme
Sonra, oluşturulan betiği düzenli olarak çalıştırmak üzere Windows zamanlanmış görevlerine ekleyin.
- “Görev Zamanlayıcı”yı açın ve “Temel Görev Oluştur”u seçin.
- Göreve bir ad ve açıklama verin.
- Tetikleyiciyi ayarlayarak betiğin ne sıklıkla çalıştırılacağını belirleyin (örn., günlük, haftalık).
- “Eylem” adımında, “Bir program başlat”ı seçin ve PowerShell betiğinin yolunu belirtin.
- Gerekirse diğer ayarları düzenleyin ve görevi kaydedin.
Bu şekilde, belirtilen dizin boyutu ayarlanan eşiği aştığında otomatik olarak bir uyarı verilecektir. Bu, ani veri artışlarını veya beklenmedik kapasite kıtlıklarını erken tespit etmeye ve uygun önlemleri almaya yardımcı olur.
Özet
PowerShell’i kullanarak, belirli bir dizinin boyutunu doğru bir şekilde ölçmek ve bu verilere dayanarak depolama yönetimi ve izleme işlemleri gerçekleştirmek mümkündür. Bu makale, temel komutları kullanmaktan, boyut birimlerini dönüştürmeye, alt dizinler dahil toplam boyutu hesaplamaya, belirli dosya türlerinin boyutunu hesaplamaya, sonuçları bir dosyaya çıktı almaya ve dizin boyutlarını düzenli olarak izlemek için betikleri kullanmaya kadar geniş bir teknik yelpazesi tanıttı. Bu yöntemler uygun şekilde birleştirilerek, daha etkin veri yönetimi sağlanabilir. PowerShell, artan veri ile ilişkili zorlukları ele almak için güçlü bir araç olarak bir kez daha teyit edilmiştir.