Скопируйте файлы и пропустите используемые
Я пытаюсь сделать сценарий 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 файлов, а третий использовался, вся передача останавливается.
Как я могу изменить свой сценарий, чтобы продолжить работу над оставшимися элементами?
1 ответ
Вы ищете общее -ErrorAction
параметр с установленным на SilentlyContinue
:
get-childitem -Path C:\Share1 | ForEach-Object { Copy-Item $_.FullName C:\share2 -verbose -ErrorAction SilentlyContinue }
Примечание: вам не нужно Foreach-Object
Командлет здесь:
Get-ChildItem -Path C:\Share1 | Copy-Item C:\share2 -verbose -ErrorAction SilentlyContinue
Примечание 2: как уже упоминалось, это будет игнорировать все ошибки. Другой вариант - использовать handle.exe из пакета sysinternals для проверки наличия открытого дескриптора.