Get IIS log location via powershell? Get IIS log location via powershell? powershell powershell

Get IIS log location via powershell?


I found this to work for me since I want to know all of the sites log directory.

Import-Module WebAdministrationforeach($WebSite in $(get-website))    {    $logFile="$($Website.logFile.directory)\w3svc$($website.id)".replace("%SystemDrive%",$env:SystemDrive)    Write-host "$($WebSite.name) [$logfile]"    } 


Import-Module WebAdministration$sitename = "mysite.com"$site = Get-Item IIS:\Sites\$sitename$id = $site.id$logdir = $site.logfile.directory + "\w3svc" + $id

Thanks for Chris Harris for putting the website ID idea in my head. I was able to search around better after that and it led me to the WebAdministration module and examples of its use.


Nice... I updated your script a little bit to Ask IIS for the log file location.

    param($website = 'yourSite')Import-Module WebAdministration$site = Get-Item IIS:\Sites\$website$id = $site.id$logdir = $site.logfile.directory + "\w3svc" + $id$time = (Get-Date -Format "HH:mm:ss"(Get-Date).addminutes(-30))# Location of IIS LogFile$File = "$logdir\u_ex$((get-date).ToString("yyMMdd")).log"# Get-Content gets the file, pipe to Where-Object and skip the first 3 lines.$Log = Get-Content $File | where {$_ -notLike "#[D,S-V]*" }# Replace unwanted text in the line containing the columns.$Columns = (($Log[0].TrimEnd()) -replace "#Fields: ", "" -replace "-","" -replace "\(","" -replace "\)","").Split(" ")# Count available Columns, used later$Count = $Columns.Length# Strip out the other rows that contain the header (happens on iisreset)$Rows = $Log | where {$_ -like "*500 0 0*"}# Create an instance of a System.Data.DataTable#Set-Variable -Name IISLog -Scope Global$IISLog = New-Object System.Data.DataTable "IISLog"# Loop through each Column, create a new column through Data.DataColumn and add it to the DataTableforeach ($Column in $Columns) {  $NewColumn = New-Object System.Data.DataColumn $Column, ([string])  $IISLog.Columns.Add($NewColumn)}# Loop Through each Row and add the Rows.foreach ($Row in $Rows) {  $Row = $Row.Split(" ")  $AddRow = $IISLog.newrow()  for($i=0;$i -lt $Count; $i++) {    $ColumnName = $Columns[$i]    $AddRow.$ColumnName = $Row[$i]  }  $IISLog.Rows.Add($AddRow)  }  $IISLog | select @{n="DateTime"; e={Get-Date ("$($_.date) $($_.time)")}},csuristem,scstatus | ? { $_.DateTime -ge $time }