在 PowerShell 中使用 WinSCP 将整个驱动器上传到服务器,跳过所有无法读取的文件和文件夹
Upload whole drive to a server using WinSCP in PowerShell skipping all files and folders that cannot be read
我正在尝试使用 PowerShell 和 WinSCPnet.dll
将整个驱动器(例如 D: 驱动器文件)从 Windows 盒复制到 Linux 盒。当我尝试复制特定文件夹时,我能够将该文件夹中的所有文件复制到 Linux 路径。但是当我尝试将整个 D: 驱动器复制到 Linux box 文件夹时,出现以下错误。
Error retrieving file list for "d:$RECYCLE.BIN\S-1-5-21-1458064458-1966517317-3155185246-1003*.*".
System Error. Code: 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盘复制到目标Linuxbox文件夹,但是出现了上面提到的错误
您可以使 WinSCP .NET 程序集跳过所有无法通过处理 Session.QueryReceived
event:
打开的文件和文件夹
# Continue on any error
$session.add_QueryReceived( {
Write-Host "Error: $($_.Message)"
$_.Continue()
} )
$session.PutFiles("d:\*", "/tmp/some/").Check()
代码基于文章 Recursively download directory tree with custom error handling。
另一种选择是使用 TransferOptions.FileMask
.
从传输中明确排除有问题的文件和文件夹
我正在尝试使用 PowerShell 和 WinSCPnet.dll
将整个驱动器(例如 D: 驱动器文件)从 Windows 盒复制到 Linux 盒。当我尝试复制特定文件夹时,我能够将该文件夹中的所有文件复制到 Linux 路径。但是当我尝试将整个 D: 驱动器复制到 Linux box 文件夹时,出现以下错误。
Error retrieving file list for "d:$RECYCLE.BIN\S-1-5-21-1458064458-1966517317-3155185246-1003*.*". System Error. Code: 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盘复制到目标Linuxbox文件夹,但是出现了上面提到的错误
您可以使 WinSCP .NET 程序集跳过所有无法通过处理 Session.QueryReceived
event:
# Continue on any error
$session.add_QueryReceived( {
Write-Host "Error: $($_.Message)"
$_.Continue()
} )
$session.PutFiles("d:\*", "/tmp/some/").Check()
代码基于文章 Recursively download directory tree with custom error handling。
另一种选择是使用 TransferOptions.FileMask
.