user3676243
user3676243

Reputation: 13

Delete Files Older Than X Days: Presentation of Data/Logging Files

I'm new to Powershell, I'm creating a code to delete a file/s if more than "x" days.

I'm almost done. Need your help in representing my date (table) and should not produce a log file if no files will be delete.

Here's my code:

$max_days = "-30"
$curr_date = Get-Date
$del_date = $curr_date.AddDays($max_days)
$Path = "C:\Desktop\Code"

$DateTime = Get-Date -Format "D=yyyy-MM-dd_T=HH-mm-ss"

$itemsearch = Get-ChildItem C:\Test -Recurse | Where-Object { $_.LastWriteTime -lt $del_date}

Foreach ($item in $itemsearch) 
{
    Write "File:", $item.Name "Modified:", $item.LastWriteTime "Path:", $item.FullName "Date Deleted:" $del_date | Out-File "C:\Desktop\Code\Deleted\SFTP_DeleteFiles_WORKSPACE_$DateTime.txt" -append
    $item | Remove-Item
}

Can anyone please help me? It's already working by the way.

Just need to present the data in table form and don't create a log file if there's nothing to delete.

Update:

Already solved the condition statement by doing:

    if($itemsearch)
{
    Foreach ($item in $itemsearch) 
    {
        Write "File:", $item.Name "Modified:", $item.LastWriteTime "Path:", $item.FullName "Date Deleted:" $del_date | Out-File "C:\Desktop\Code\Deleted\SFTP_DeleteFiles_WORKSPACE_$DateTime.txt" -append
        $item | Remove-Item
    }
}

else
{
    Write "No files will be deleted."
}

Thanks!


What I want to display it in Excel/Text file is like this one:

http://i59.tinypic.com/30wv33d.jpg

Anyone?


It returns me with this one:

IsReadOnly;"IsFixedSize";"IsSynchronized";"Keys";"Values";"SyncRoot";"Count" False;"False";"False";"System.Collections.Hashtable+KeyCollection";"System.Collections.Hashtable+ValueCollection";"System.Object";"4" False;"False";"False";"System.Collections.Hashtable+KeyCollection";"System.Collections.Hashtable+ValueCollection";"System.Object";"4" False;"False";"False";"System.Collections.Hashtable+KeyCollection";"System.Collections.Hashtable+ValueCollection";"System.Object";"4" False;"False";"False";"System.Collections.Hashtable+KeyCollection";"System.Collections.Hashtable+ValueCollection";"System.Object";"4"

In Excel. Do you have any idea? I have to search it though.

Upvotes: 1

Views: 680

Answers (1)

Chris
Chris

Reputation: 1009

To introduce tabular logging I would use a CSV file as output by replacing your foreach block by this code:

$results = @()

foreach ($item in $itemsearch) 
{
    $success = $true
    try
    {
        $item | Remove-Item
    }
    catch
    {
        $success = $false
    }

    if( $success -eq $true )
    {
        Write-Host $item.FullName 'successfully deleted.'
        $results += [PSCustomObject]@{'File'=$item.Name;'Modified'=$item.LastWriteTime;'Path'=$item.FullName;'Date Deleted'=$del_date;'State'='SUCCESS'}
    }
    else
    {
        Write-Host 'Error deleting' $item.FullName
        $results += [PSCustomObject]@{'File'=$item.Name;'Modified'=$item.LastWriteTime;'Path'=$item.FullName;'Date Deleted'=$del_date;'State'='ERROR'}
    }
}

$results | Export-Csv -Path "C:\Desktop\Code\Deleted\SFTP_DeleteFiles_WORKSPACE_$DateTime.csv" -Encoding UTF8 -Delimiter ';' -NoTypeInformation

First an empty array is created ($results).

The try/catch block is here to detect if the deletion succeeded or not, then the appropriate line is added to $results.

At the end the $results array is exported to CSV with ';' separator so you can open it right away with Excel.

Upvotes: 0

Related Questions