下面是一个脚本,用于监视存放文件的目录及其子文件夹(不包括1).每隔10分钟左右,我会查找新文件,然后将它们与数据库表进行匹配,以便告诉我需要将它们移动到哪里.然后,它将文件本地复制到存档,将其移动到需要移动到的位置,然后将记录插入到具有文件属性的另一个DB表中以及它来来去去的位置.如果数据库中没有匹配项,或者存在脚本错误 - 它会向我发送一封电子邮件.
但是,由于文件会不断地存放到目录中,因此脚本执行时仍可能正在写入文件.结果,我得到"进程无法访问该文件,因为它正被另一个进程使用".一直通过电子邮件发送给我.另外,因为我没有预先处理错误; 它遍历循环,并在数据库的日志表中插入一个错误的条目,文件属性不正确.当文件最终释放时,它会再次插入.
我正在寻找一种方法来识别附加了进程的文件; 并且在脚本执行时跳过它们 - 但是几天的网络搜索和一些测试尚未得出答案.
提前致谢.
## CLEAR ERROR LOG
$error.clear()
Write-Host "***File Transfer Script***"
## PARAMETERS
$source_path = "D:\Files\In\"
$xferfail_path = "D:\Files\XferFailed\"
$archive_path = "D:\Files\XferArchive\"
$email_from = "SQLMail <SQLMail@bar.com>"
$email_recip = [STRING]"foo@bar.com"
$smtp_server = "email.bar.com"
$secpasswd = ConvertTo-SecureString "Pa$$w0rd" -AsPlainText -Force
$smtp_cred = New-Object System.Management.Automation.PSCredential ("BAR\SQLAdmin", $secpasswd)
## SQL LOG FUNCTION
function Run-SQL ([string]$filename, [string]$filepath, [int]$filesize, [int]$rowcount, [string]$xferpath)
{
$date = get-date -format G
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=SQLSERVER;Database=DATABASE;Uid=SQLAdmin;Pwd=Pa$$w0rd;"
$SqlConnection.Open()
$SqlCmd = New-Object …Run Code Online (Sandbox Code Playgroud) powershell ×1