IIS (Internet Information Services) üzerinde çalışan uygulamalara ait log dosyaları varsayılan olarak C:\inetpub\logs\LogFiles
dizininde depolanır. Ancak bazı durumlarda log dosyalarını daha düzenli bir şekilde yönetebilmek veya sistem diskindeki alanı koruyabilmek için bu logların başka bir dizine taşınması gerekebilir.
PowerShell kullanarak IIS loglarını yeni bir dizine taşımak ve varsayılan log dizinini değiştirmek mümkündür. Bu makalemde PowerShell komutlarıyla IIS loglarını taşıma ve log dizinini güncelleme adımları anlatılacaktır.
Mevcut IIS loglarını başka bir dizine taşımak için PowerShell ile aşağıdaki adımları takip edebilirsiniz. Bu komutlar log dosyalarını seçilen yeni dizine taşır ve orijinal log dosyalarının bulunduğu dizinde yer açılmasını sağlar.
# Kaynak (mevcut) ve hedef dizini tanımlayınız;
$sourcePath = "C:\inetpub\logs"
$destinationPath = "L:\IIS_Logs"
# Hedef dizin yoksa oluşturunuz;
if (!(Test-Path -Path $destinationPath)) {
New-Item -ItemType Directory -Path $destinationPath
}
# Log dosyalarını taşıyını<;
Get-ChildItem -Path $sourcePath -Recurse -File | ForEach-Object {
$destinationFile = Join-Path -Path $destinationPath -ChildPath $_.Name
Move-Item -Path $_.FullName -Destination $destinationFile
}

Bu script içerisinde;
- $sourcePath ve $destinationPath değişkenleriyle logların kaynak ve hedef dizinleri tanımlanır.
- Hedef dizin yoksa New-Item komutuyla oluşturulur.
- Move-Item komutu, Get-ChildItem ile belirlenen dosyaları kaynak dizinden hedef dizine taşır.
Log dosyalarını taşıdıktan sonra IIS üzerindeki logların yeni dizine kaydedilmesi için log dizinini güncellemek gereklidir. PowerShell ile IIS üzerindeki log dizini kolayca güncellenebilir.
Import-Module WebAdministration
# Yeni log dizini oluşturulması;
$newLogDirectory = "L:\IIS_Logs"
# Varsayılan site için log dizinini ayarlamak;
Set-ItemProperty "IIS:\Sites\Default Web Site" -Name logFile.directory -Value $newLogDirectory

Bu komut ile varsayılan site olan “Default Web Site” için log dizinini L:\IIS_Logs olarak ayarlar. Farklı bir site için kullanmak isterseniz Default Web Site kısmını ilgili sitenin adıyla değiştirmeniz yeterlidir.
Eğer IIS üzerinde birden fazla site çalışıyorsa ve tüm sitelerin log dosyalarının aynı dizine kaydedilmesini istiyorsanız PowerShell ile tüm sitelerin log dizinini topluca değiştirebilirsiniz. Aşağıdaki komut IIS üzerindeki tüm siteler için log dizinini günceller.
Import-Module WebAdministration
# Yeni log dizini
$newLogDirectory = "L:\IIS_Logs"
# Tüm sitelerin log dizinini ayarla
Get-ChildItem IIS:\Sites | ForEach-Object {
Set-ItemProperty "IIS:\Sites\$($_.Name)" -Name logFile.directory -Value $newLogDirectory
}

bu komut ile;
- Get-ChildItem ile IIS üzerindeki tüm siteler listelenir.
- ForEach-Object döngüsü ile her site için logFile.directory özelliği $newLogDirectory değişkeninde belirtilen yeni log dizini olarak güncellenir.
Log dizinini değiştirdikten sonra yeni logların doğru dizine kaydedildiğinden emin olmak için IIS hizmetlerini yeniden başlatmanız gerekebilir. Bunu PowerShell ile yapmak için aşağıdaki komutu kullanabilirsiniz;
iisreset
Ayrıca yeni log dizinine yazma izinleriniz olduğundan emin olunuz. IIS servislerinin log dosyalarını yeni dizine kaydedebilmesi için bu dizin üzerinde gerekli izinlere sahip olması önemlidir. Bu adımları takip ederek IIS loglarını farklı bir dizine taşıyabilir ve yeni log dosyalarının doğrudan bu dizine kaydedilmesini sağlayabilirsiniz.
Buradaki bütün işlemleri tek seferde gerçekleştirmek için aşağıdaki komutu kullanabilirsiniz.
# IIS WebAdministration modülünün yüklenmesi;
Import-Module WebAdministration
# Yeni log dizinin oluşturulması;
$newLogDirectory = "L:\IIS_Logs"
# Hedef dizin yoksa oluşturulması;
if (!(Test-Path -Path $newLogDirectory)) {
New-Item -ItemType Directory -Path $newLogDirectory
}
# Tüm siteler için log dizinini değiştirilmesi;
Get-ChildItem -Path IIS:\Sites | ForEach-Object {
$siteName = $_.Name
Set-ItemProperty "IIS:\Sites\$siteName" -Name logFile.directory -Value $newLogDirectory
}
Write-Output "IIS log dizini tüm siteler için $newLogDirectory olarak ayarlandı."
Yapılan bu işlemlerden sonra IIS Logları scirpt içerisindeki “L:\IIS_Logs” dizinine taşınacaktır.
