Загрузить весь диск на сервер с помощью WinSCP в PowerShell, пропуская все файлы и папки, которые не могут быть прочитаны - PullRequest
1 голос
/ 07 ноября 2019

Я пытаюсь скопировать весь диск, например D: файлы дисков с коробки Windows на коробку Linux, используя PowerShell и WinSCPnet.dll. Когда я пытаюсь скопировать определенные папки, я могу скопировать все файлы из этой папки в путь Linux. Но когда я пытаюсь скопировать весь диск D: в папку Linux, я получаю следующую ошибку:

Ошибка при получении списка файлов для "d: \ $ RECYCLE.BIN \ S-1-5-21-1458064458-1966517317-3155185246-1003 *. *». Системная ошибка. Код: 5.

$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
$transferResult = $session.PutFiles("d:\*", "/tmp/some/", $False, $transferOptions)
# Throw on any error
$transferResult.Check()

Ожидаемый результат должен состоять в том, что он должен скопировать весь диск D в целевую папку Linux, но появляется вышеупомянутая ошибка.

1 Ответ

3 голосов
/ 07 ноября 2019

Вы можете заставить сборку WinSCP .NET пропускать все файлы и папки, которые нельзя открыть, обрабатывая Session.QueryReceived событие :

# Continue on any error
$session.add_QueryReceived( { 
    Write-Host "Error: $($_.Message)"
    $_.Continue()
} )

$session.PutFiles("d:\*", "/tmp/some/").Check()

Код на основе статьи Рекурсивная загрузкадерево каталогов с пользовательской обработкой ошибок .


Другой вариант - явное исключение проблемных файлов и папок из передачи с помощью TransferOptions.FileMask.

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