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
And you can schedule this and keep it running forever 🙂 Did this work for you?
PandaPoodle
Feb 08, 2022Copper Contributor
It works with one loop but whenever it loops again it doesn't copy the file again. Instead I get an error stating that the Copy-Item cannot access the d:\backup file because its being used by another process. This only happens if I use the email script.
- Feb 08, 2022It 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?- PandaPoodleFeb 08, 2022Copper ContributorThe 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 }