Private/Resize-SingleLogfile.ps1

Function Resize-SingleLogfile {

    [cmdletbinding()]
    param(

       [Parameter(Mandatory=$true)]
       [String]$Path

       ,[Parameter(Mandatory=$true)]
       [int]$RowsToKeep

    )

    Begin {

        If ( ( Test-Path -Path $Path -IsValid ) -eq $false ) {
            Write-Error -Message "The path '$( $Path )' is invalid."
            return
        }

        If ( ( Test-Path -Path $Path ) -eq $false ) {
            Write-Verbose -Message "Skipping '$( $Path )' - file does not exist yet."
            return
        }

    }

    Process {

        # Create a temporary file
        $tmpdir = Get-TemporaryPath
        $tempFile = Join-Path -Path $tmpdir -ChildPath "$( [guid]::newguid().toString() ).tmp"

        # Write only last lines to the new file
        Get-Content -Tail $RowsToKeep -Encoding utf8 -Path $Path | Set-Content -Path $tempFile -Encoding utf8

        # Delete original file and replace with trimmed version
        Remove-Item -Path $Path
        Move-Item -Path $tempFile -Destination $Path

        Write-Verbose -Message "Resized '$( $Path )' to last $( $RowsToKeep ) lines"

    }

}