Public/Remove-specOldFiles.ps1

Function Remove-specOldFiles {

    <#
    .SYNOPSIS
        Deletes files of a specified type older than a specified number of days in the given path(s).
 
    .DESCRIPTION
        The Remove-specOldFiles function identifies and deletes files of a specified type that are older than a specified
        number of days within the provided path(s). It is designed to handle various file types such as 'txt', 'log', 'log.*', 'tmp', 'temp', 'ps1'.
 
    .PARAMETER Path
        Specifies the path(s) where files will be searched. This parameter is mandatory and supports pipeline input.
 
    .PARAMETER FileType
        Specifies the type of files to search for. Valid values include 'txt', 'log', 'log.*', 'tmp', 'temp', 'ps1'.
        This parameter is mandatory.
 
    .PARAMETER DaysOldOrMore
        Specifies the number of days that determine whether a file is considered old. Files older than this specified
        number of days will be deleted. This parameter is mandatory.
 
    .EXAMPLE
        Remove-specOldFiles -Path "C:\Logs" -FileType "log" -DaysOldOrMore 7
        Deletes log files in the "C:\Logs" directory that are older than 7 days.
 
    .EXAMPLE
        "C:\Archives", "D:\Backup" | Remove-specOldFiles -FileType "txt" -DaysOldOrMore 30
        Deletes text files in the "C:\Archives" and "D:\Backup" directories that are older than 30 days.
 
    .NOTES
        Author : owen.heaume
        Version : 1.0
 
    #>


    [cmdletbinding(SupportsShouldProcess)]

    param (
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [string[]]$Path,

        [Parameter(Mandatory = $true)]
        [ValidateSet ('txt', 'log', 'log.*', 'tmp', 'temp', 'ps1')]
        [string]$FileType,

        [Parameter(Mandatory = $true)]
        [ValidateRange(0, 180)]
        [int]$DaysOldOrMore
    )

    begin {
        write-host "Deleting files older than or equal to $DaysOldOrMore days:`n" -ForegroundColor DarkCyan
    }

    process {
        $Files = Get-specOldFiles -Path $Path -FileType $FileType -DaysOldOrMore $DaysOldOrMore

        Write-host "File Path: $Path" -ForegroundColor DarkGray
        write-host "Total number of files to delete: $($files.count)" -ForegroundColor DarkGray

        foreach ($File in $Files) {
            $formattedDate = $file.lastwritetime.ToString("dd-MMMM-yyyy")

            if ($PSCmdlet.shouldprocess("$($file.fullname)", "Delete")) {
                write-host "deleting $($file.fullname)" -ForegroundColor DarkYellow
                Remove-Item -Path $File.FullName -Force
            }
        }
        write-host
    }
    end {}
}