Forum Discussion

PandaPoodle's avatar
PandaPoodle
Copper Contributor
Feb 06, 2022

Copy a file and send that copy via email on a loop

Hi, I was just wondering if there is a way to copy a .txt file to a specific destination and then send that copy via email on a loop that runs every hour or so? I've tried to do it but have had no lu...
  • Harm_Veenstra's avatar
    Harm_Veenstra
    Feb 08, 2022

    PandaPoodle 

     

    Some error handling and checking 🙂 

     

    function Test-FileLock {
        param (
            [parameter(Mandatory = $true)][string]$Path
        )
      
        $oFile = New-Object System.IO.FileInfo $Path
      
        if ((Test-Path -Path $Path) -eq $false) {
            return $false
        }
      
        try {
            $oStream = $oFile.Open([System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None)
      
            if ($oStream) {
                $oStream.Close()
            }
            $false
        }
        catch {
            # file is locked by a process.
            return $true
        }
    }
      
      
    while ($true) {
        #Copying file to other location but checking if it's in use first
        if ((Test-Filelock -path d:\backup\filename.txt) -eq $False) {
            Copy-Item -Path c:\temp\filename.txt -Destination d:\backup -Force:$true
      
            #Sending mail with the file
            Send-MailMessage -SmtpServer smtp.domain.local -port 25 -Subject "Emailing the file" -Body  "See attached file" -Attachments d:\backup\filename.txt -To "Email address removed" -From "Email address removed"
        }
      
        #Wait for 1 hour
        Start-Sleep -Seconds 3600
    }

Resources