.net - 在PowerShell中使用WinSCP将整个驱动器上载到服务器,从而跳过所有无法读取的文件和文件夹

标签 .net powershell sftp winscp winscp-net

我正在尝试使用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驱动器复制到目标Linux box文件夹,但是上述错误即将到来。

最佳答案

您可以通过处理 Session.QueryReceived event使WinSCP .NET程序集跳过所有无法打开的文件和文件夹:

# 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 从传输中明确排除有问题的文件和文件夹。

关于.net - 在PowerShell中使用WinSCP将整个驱动器上载到服务器,从而跳过所有无法读取的文件和文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58744017/

相关文章:

c# - 使用 SSH.Net 下载和返回非阻塞数据流

spring - 如何使用 spring 将文件从本地目录发送到 sftp?

c# - 检查数据表中是否有空值的最佳方法

.net - 为 Citrix/终端服务器编程 .NET 应用程序 : Compliance and Pitfalls

.net - IIS 7.0 错误 HTTP 错误 500.19 - 内部服务器错误(错误代码 0x80070003)

c# - 使用 C# 中的 PowerShell 计算属性

powershell - 如何在 powershell 提示符中使用波浪号?

port - SFTP是否需要双向访问

c# - 如何在保持其大小的同时自动将 WPF 窗口捕捉到屏幕边缘?

c# - 将 PS 脚本的输出存储在 C# 变量中