我试图让PowerShell脚本每晚运行,将PDF文件从C:\ share1复制到C:\ share2并写入事件日志。
我当前的文件复制脚本位如下所示:
Try
{
get-childitem -Path C:\Share1 | ForEach-Object { Copy-Item $_.FullName C:\share2 -verbose }
#Writes to event log as success.
}
Catch
#Logs the event as failed
}
我遇到的问题是正在使用复制/替换的文件。 当文件正在使用时,脚本会停止复制该文件并显示错误:
PS>TerminatingError(Copy-Item): "The process cannot access the file 'C:/share2/1.pdf' because it is being used by another process."
我想至少修改我的脚本,以便继续复制剩余的文件。
例如,如果我有100个文件而第3个文件正在使用中,则整个传输将停止。
如何修改我的脚本以继续剩余的项目?
答案 0 :(得分:1)
您正在寻找设置为-ErrorAction
的常见SilentlyContinue
参数:
get-childitem -Path C:\Share1 | ForEach-Object { Copy-Item $_.FullName C:\share2 -verbose -ErrorAction SilentlyContinue }
注意:
Foreach-Object
注2:正如gvee所提到的,这将忽略所有错误。另一个选择是使用sysinternals套件中的handle.exe来检查是否有一个打开的句柄。