PowerShell ve GPO ile Windows'ta (RDS) Kullanıcı Profillerindeki Önbelleği ve Geçici Dosyaları Temizleyin
Windows Server RDS grubu yöneticileri, büyük miktarda kullanıcı verisi nedeniyle genellikle bir sistem sürücüsünde yer kalmaması sorunuyla karşı karşıya kalır. Bu makale, Windows'taki kullanıcı profillerindeki Geri Dönüşüm Kutusu, İndirilenler, Geçici ve Önbellek klasörlerini otomatik olarak temizlemek için PowerShell ve Grup İlkelerini nasıl kullanacağınızı gösterir.
Windows Depolama Alanı ile Temp ve İndirme Klasörlerini Otomatik Olarak Temizleme
Windows Server 2019/2022 ve Windows 10/11'de eski ve geçici dosyaları otomatik olarak silmek için yerleşik Storage Sense özelliğini kullanabilirsiniz. Temp ve İndirilenler klasörlerini temizlemenizi sağlayan özel GPO seçeneklerine sahiptir.
Windows Kullanıcıları İçin Geri Dönüşüm Kutusu Nasıl Boşaltılır?
Varsayılan olarak, Geri Dönüşüm Kutusu klasörü (
$Recycle.Bin) Windows ana bilgisayarında silinen dosyalar için etkinleştirilmiştir. RDS sunucusunda bu dizindeki (ad olarak kullanıcının SID'si ile) her kullanıcı için ayrı bir Geri Dönüşüm Kutusu klasörü oluşturulur. Zamanla, tüm kullanıcıların geri dönüşüm kutularındaki toplam dosya boyutunun RDS ana bilgisayarında önemli miktarda disk alanı kaplayacağını göreceksiniz.
Windows'ta Geri Dönüşüm Kutusu'nun varsayılan boyutu, disk boyutunun yaklaşık %5'idir. Her sürücüdeki Geri Dönüşüm Kutusu'nun maksimum boyutunu kendi özelliklerinde değiştirebilirsiniz. Burada ayrıca Dosyaları Geri Dönüşüm Kutusuna taşıma seçeneğini kullanarak Geri Dönüşüm Kutusunu tamamen devre dışı bırakabilirsiniz. Ancak bu, yalnızca mevcut kullanıcı için geri dönüşüm kutusu ayarlarını değiştirecektir.
Kullanıcılar için maksimum Geri Dönüşüm Kutusu boyutunu, Kullanıcı Yapılandırması -> Yönetim Şablonları -> Windows Bileşenleri -> Dosya Gezgini altındaki İzin verilen maksimum geri dönüşüm kutusu boyutu GPO seçeneğiyle ayarlayabilirsiniz. Maksimum Geri Dönüşüm Kutusu boyutu, disk boyutunuzun yüzdesi olarak ayarlanır. Bunu 0 olarak ayarlamak, tüm sürücülerdeki geri dönüşüm kutusunu devre dışı bırakır.
Windows'ta Geri Dönüşüm kutusunu temizlemek için Clear-RecycleBin cmdlet'ini kullanabilirsiniz (PowerShell 5.1'de mevcuttur ve Windows 10'da daha yenidir). Geri Dönüşüm Kutusu'nu sormadan boşaltmak için aşağıdaki komutu çalıştırın:
Clear-RecycleBin -ForceBu komutu bir RDS ana bilgisayarında ortak kullanıcı olarak çalıştırırsanız, yalnızca geçerli kullanıcının geri dönüşüm kutusu temizlenir. Bir kullanıcı oturumu kapattığında geri dönüşüm kutusunu temizlemek için bu komutu GPO oturum kapatma komut dosyalarınıza ekleyebilirsiniz:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command Clear-RecycleBin -Confirm:$falseWindows'un önceki sürümleri için (PowerShell'in eski sürümleriyle), RecycleBin'i temizlemek için aşağıdaki kodu kullanabilirsiniz:
$Shell = New-Object -ComObject Shell.Application
$RecycleBin = $Shell.Namespace(0xA)
$RecycleBin.Items() | %{Remove-Item $_.Path -Recurse -Confirm:$false}PowerShell ile Kullanıcı Profilindeki Önbellek, Temp ve İndirilenler Klasörlerini Temizleyin
Windows Server RDS veya Windows 10/11 çalıştıran bir masaüstü bilgisayardaki bir kullanıcı profilindeki Temp, Downloads ve diğer bazı geçici klasörleri temizlemek için bir PowerShell betiği düşünelim.
Senaryo yorumları:
-
Bu örnekte, İndirilenler klasöründeki 14 günden eski dosyaları sileceğiz (bu seçeneği değiştirebilirsiniz). Önbelleği ve geçici dosyaları olan diğer klasörler tamamen boş olacaktır;
Komut dosyası geçerli kullanıcı bağlamında çalışır (komut dosyası, bir kullanıcı Windows oturumunu kapattığında eski dosyaları siler ve bir GPO oturum kapatma komut dosyası olarak çalışır);
Bir RDS ortamında kullanılıyorsa, kullanıcıların oturumlarını sonlandırmak için Oturumu Kapat/Oturum Aç düğmesine tıkladıklarından emin olun. Ayrıca, belirli bir süre işlem yapılmadığında oturumları otomatik olarak sonlandırmak için RDS oturum zaman aşımlarını yapılandırmanızı öneririz.
Silinen dosyalarla ilgili tüm bilgiler bir metin günlük dosyasına kaydedilecektir (test kullanıcılarında komut dosyasında hata ayıkladıktan sonra bunu devre dışı bırakabilirsiniz);
Ayrıca RDP bağlantı geçmişini ve önbelleğini de temizleyecektir;
Bir kullanıcı profilindeki Windows Hata Bildirimi (WER) klasörü temizlenir;
Google Chrome önbelleğini temizleyen satırlar komut dosyasında yorumlanmıştır. Kullanıcılarınız kullanıyorsa ve Chrome önbelleği çok yer kaplıyorsa, yolları içeren satırların açıklamasını kaldırın;
Temizlemeden önce ve sonra kullanıcı profili klasörünün mevcut boyutunu kontrol etmek için ekstra bir işlem ekleyebilirsiniz (daha doğru bilgi almanızı sağlar, ancak biraz zaman alır). Veya önce ve sonra boş disk alanını kontrol edebilirsiniz (hızlı bir şekilde yapılır).
# You can use this script to clean folders in a user profile (cache, temp, downloads, google chrome cache) on RDS hosts, VDIs, or workstations
# Run the PowerShell script under a commaon user account (no administrator privileges are required). Only temporary files and the current user's cache are deleted.
# You can run this script via GPO (logoff script) or with the Task Scheduler
# Test the script in your environment and then remove the WhatIf option to permanently delete files
$Logfile = "$env:USERPROFILE\cleanup_profile_script.log"
$OldFilesData = (Get-Date).AddDays(-14)
# Complete cleanup of cache folders
[array] $clear_paths = (
'AppData\Local\Temp',
'AppData\Local\Microsoft\Terminal Server Client\Cache',
'AppData\Local\Microsoft\Windows\WER',
'AppData\Local\Microsoft\Windows\AppCache',
'AppData\Local\CrashDumps'
#'AppData\Local\Google\Chrome\User Data\Default\Cache',
#'AppData\Local\Google\Chrome\User Data\Default\Cache2\entries',
#'AppData\Local\Google\Chrome\User Data\Default\Cookies',
#'AppData\Local\Google\Chrome\User Data\Default\Media Cache',
#'AppData\Local\Google\Chrome\User Data\Default\Cookies-Journal'
)
# Folders where only old files should be removed
[array] $clear_old_paths = (
'Downloads'
)
function WriteLog {
Param ([string]$LogString)
$Stamp = (Get-Date).ToString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp $LogString"
Add-content $LogFile -value $LogMessage
}
WriteLog "Starting profile cleanup script"
# If you want to clear the Google Chrome cache folder, stop the chrome.exe process
$currentuser = $env:UserDomain + "\"+ $env:UserName
WriteLog "Stopping Chrome.exe Process for $currentuser"
Get-Process -Name chrome -ErrorAction SilentlyContinue | Where-Object {$_.SI -eq (Get-Process -PID $PID).SessionId} | Stop-Process
Start-Sleep -Seconds 5
# Clean up cache folders
ForEach ($path In $clear_paths) {
If ((Test-Path -Path "$env:USERPROFILE\$path") -eq $true) {
WriteLog "Clearing $env:USERPROFILE\$path"
Remove-Item -Path "$env:USERPROFILE\$path" -Recurse -Force -ErrorAction SilentlyContinue -WhatIf -Verbose 4>&1 | Add-Content $Logfile
}
}
# Delete old files
ForEach ($path_old In $clear_old_paths) {
If ((Test-Path -Path "$env:USERPROFILE\$path_old") -eq $true) {
WriteLog "Clearing $env:USERPROFILE\$path_old"
Get-ChildItem -Path "$env:USERPROFILE\$path_old" -Recurse -Force -ErrorAction SilentlyContinue | Where-Object {($_.LastWriteTime -lt $OldFilesData)} | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue -WhatIf -Verbose 4>&1 | Add-Content $Logfile
}
}
WriteLog "End profile cleanup script"
Benzer şekilde, temizlemek istediğiniz diğer klasörleri bir kullanıcı profiline ekleyebilirsiniz.
$clear_paths.
Komut dosyasının tam sürümü için GitHub depoma bakın: https://github.com/maxbakhub/winposh/blob/main/RDS/CleanupUserProfile.ps1.
Bu PowerShell betiği, kullanıcının RDP sunucusu oturumu sona erdiğinde çalışabilir. Komut dosyası atamanın en kolay yolu, oturum kapatma GPO ilkesini kullanmaktır.
Yeni bir GPO oluşturun ve bunu RDS ana bilgisayarlarınızın bulunduğu Organizasyon Birimine (OU) atayın;
Kullanıcı Grup İlkesi Geri Döngü İşleme modunu yapılandır seçeneğini etkinleştirin. Bu, Kullanıcılar bölümündeki ayarları bilgisayara uygulamak için gereklidir;
Daha fazla bilgi için Grup İlkesi'nin bir bilgisayara/kullanıcıya neden uygulanmadığına bakın.
PowerShell betik dosyasını etki alanı denetleyicinizdeki Net oturum açma klasörüne kopyalayın (
\\a-d.site\netlogon\CleanupUserProfile.ps1);
Yetkisiz değişikliklere karşı korumak için PowerShell komut dosyası kodunu bir sertifikayla imzalayabilirsiniz.
GPO bölümüne Kullanıcı Yapılandırması -> İlkeler -> Windows Ayarları -> Komut Dosyaları -> Oturumu Kapat'a gidin. PowerShell Komut Dosyaları sekmesini açın ve Netlogon'da PS1 dosyasına bir UNC yolu ekleyin;
Yeni GPO ayarlarını uygulamak için kullanıcının Windows oturumunu kapatın;
Bir RDS sunucusunda bir kullanıcı oturumunu sonlandırırken, belirtilen klasörler otomatik olarak temizlenecektir. Bir kullanıcı profilindeki bir metin günlük dosyasında silinen dosya ve klasörlerin listesini görüntüleyebilirsiniz.
Windows Server RDS sunucularında kullanıcı profili boyutunun yönetilmesine izin veren aşağıdaki yöntemleri de kullanabilirsiniz:
Eski kullanıcı profilleri nasıl kaldırılır?
NTFS disk kotalarını etkinleştir
Burada açıklanan kullanıcı klasörü temizleme yöntemleri, Windows Server RDSH'de hem yerel olarak depolanan kullanıcı profillerine hem de Kullanıcı Profili Disklerine veya FSlogix profil kapsayıcılarına uygulanabilir.






