Forum Discussion
PandaPoodle
Feb 06, 2022Copper Contributor
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...
- Feb 08, 2022
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 }
Feb 08, 2022
It takes a few seconds to copy and email the file and then you have like an hour of editing time but.. I can imagine if it's in use or locked, that the copy-item could give an error.. But I tested it having a .csv file open in Excel and I can copy the file without issues..
Could you elaborate on "it crashes"? Does the Scheduled Task stop running?
Could you elaborate on "it crashes"? Does the Scheduled Task stop running?
PandaPoodle
Feb 08, 2022Copper Contributor
The Task continues to run but when it gets to the Copy-Item part that errors out and it just contunes onto the email part of the script.
- Feb 08, 2022
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 }
- PandaPoodleFeb 08, 2022Copper Contributor
That works great! Thank you so much for all your help!!
- Feb 08, 2022No problem and please mark my answer as solution 😊