У меня PowerShell 4.0.Я хочу скопировать файлы из источника в каталог назначения.Я использую Get-ChildItem
и Copy-Item
для копирования файлов в место назначения.Количество файлов составляет 40 файлов.
Проблема в том, что иногда существует один файл (это может быть любой файл), который не копируется из-за неполадок в сети.В этом случае я попытаюсь скопировать снова, попробовав 5 попыток, чтобы увидеть, будет ли файл окончательно скопирован, в противном случае я выдаю исключение, и копирование останавливается.В моем случае я начинаю копировать все заново.
Как скопировать единственный файл, который не копируется, и перейти к следующему?
Вот мой сценарий:
function Get-ShortName {
Begin {
$fso = New-Object -ComObject Scripting.FileSystemObject
}
Process {
if ($_.PSIsContainer) {
$fso.GetFolder($_.FullName).ShortName
} else {
$fso.GetFile($_.FullName).ShortName
}
}
}
##Delete old files on th destination folder
Remove-Item "C:\Provisioning_Files\*.*"
Get-ChildItem -Path "E:\in\*.DT190223" -Exclude '*Denorms*' -Recurse |
Copy-Item -Destination "C:\Provisioning_Files\" -Force -Verbose
Get-ChildItem -Path "E:\in\*.DT190223" -Exclude '*Denorms*' -Recurse |
Copy-Item -Destination "C:\Provisioning_Files\" -Force -Verbose
$checkprovfiles = Get-ChildItem -Path C:\Provisioning_Files -File
$File = "C:\Provisioning_Files\*.*"
$MaxRetries = 5
$RetryCount = 0;
$Completed = $false
$files = Get-ChildItem "C:\Provisioning_Files\*.*" | Get-Shortname
while (-not $Completed ) {
if ($checkprovfiles.Count -eq 40) {
Write-Verbose "The file are been all transferred to the destination path '$File'"
$Completed = $true
} else {
if ($RetryCount -ge $MaxRetries) {
Write-Verbose "Failed finding the file within '$MaxRetries' retries"
throw "Failed finding the file within '$MaxRetries' retries"
} else {
Write-Verbose "File not found, retrying in 5 seconds."
Start-Sleep '5'
Get-ChildItem -Path "E:\in\*.DT190223" -Exclude '*Denorms*' -Recurse |
Copy-Item -Destination "C:\Provisioning_Files" -Force -Verbose
Get-ChildItem -Path "E:\in\*.DT190201" -Exclude '*Denorms*' -Recurse |
Copy-Item -Destination "C:\Provisioning_Files" -Force -Verbose
$RetryCount++
}
}
Как видите, последние 3 строки показывают, что я начинаю копирование заново.Я просто хочу скопировать файл, который не сделал.