Search code examples
powershell-3.0

Copy log files for last 1 hour time stamp and notify if no log files in last 1 hour in PowerShell


I am trying to copy log files from source to destination with timestamp. If there are any logs generated in last 1 hour below script will copy the file to distention with (source folder_current Date) in destination path. The script works fine, but I need to know if there are no logs created in last 1 hour. If so, the script should create a file stating no logs for last 1 hour or it should not create folder in destination path.

$ScriptStart = Get-Date
$PreviousTime = $ScriptStart.AddHours(-1)
$source = 'c:\SOURCE\logfiles'
$dest = 'D:\dest\log'
gci $source -Recurse -File |
    ? {$_.LastWriteTime -lt $ScriptStart -and $_.LastWriteTime -gt $PreviousTime} |
    Copy-Item -Destination $dest\logfoldername

Solution

  • Separate filter from action:

    $filesToCopy = Get-ChildItem $source -Recurse -File |
                   Where-Object {
                       $_.LastWriteTime -lt $ScriptStart -and
                       $_.LastWriteTime -gt $PreviousTime
                   }
    
    if ($filesToCopy) {
        $filesToCopy | Copy-Item -Destination $dest\logfoldername
    } else {
        'no files to copy' | Set-Content 'C:\path\to\nofile.txt'
    }