# Function to Check Log Size and Rotate as Needed
function RotateLog($log) {
$threshold = 100 # Size of File in Megabytes when Log Should Be Rotated
$file = Get-Item "$log" # Get Log File
$filedir = $file.directory.fullname # Get Log Directory
$server = HostName
$filesize = $file.length/1MB # Get Current Size of File
$datetime = Get-Date -uformat "%Y%m%d-%H%M" # Get Current Date and Time
$fdatetime = Get-Date -uformat "%B %e, %Y - %H%M hours" # Get Formatted Current Date and Time
$arcdir = "$filedir\archive" # Specify Log Archive Directory
if ((Test-Path -Path $arcdir -PathType container) -ne $True) # Verify that the Archive Directory Exists - If not, Create it
{
New-Item $arcdir -Type directory # Create Directory if it does not Exist
}
if ($filesize -gt $threshold) { # Compare Log File Size to Specified Threshold
$filename = $file.name -replace $file.extension,"" # Remove File Extension from Name
$newname = "${filename}_${datetime}.log" # Specify New Name for Archived Log
Rename-Item -Path $file.fullname -NewName $newname # Rotate Current Log to Archive
Move-Item $newname -Dest "$arcdir" # Move Archived Log to Archive Directory
$rotationmessage = "-----------------------------------------------------------
Log rotation occured - $fdatetime
Rotated log available here: ${arcdir}\${newname} on $server
-----------------------------------------------------------
" # Log Rotation Message
Write-Host "$rotationmessage" # Echo Log Rotation Message to Console if Active
echo "$rotationmessage" | Out-File -FilePath "$log" -Append # Create New Log and Record Log Rotation in New Log
}
}
# Call Function
$log = "C:\myprogram\logs\main.log" # Specify Log File
RotateLog($log) # Call Log Rotation Function
Tuesday, May 31, 2011
PowerShell Log Rotation Function
Here is a handy PowerShell function for rotating logs.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment