Использование цикла while для копирования файлов из исходного состояния в PowerShell 4.0 - PullRequest
0 голосов
/ 24 февраля 2019

У меня 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 строки показывают, что я начинаю копирование заново.Я просто хочу скопировать файл, который не сделал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...