【问题标题】:Unable to find type [WinSCP.EnumerateOptions]找不到类型 [WinSCP.EnumerateOptions]
【发布时间】:2019-05-09 10:57:42
【问题描述】:

我正在使用 PowerShell 中的 WinSCP 来管理 FTP 中的文件。在使用 WinSCP 网站上给出的标准脚本时,我收到了这个错误:

找不到类型 [WinSCP.EnumerateOptions]。

我正在使用 5.13 版 - 刚离开网站。

$remotePath = "ftp://username:password@network:port/relevantfolder/"
$localPath = "C:/Users/me/localdir"
$mask = "*.*"

$files = EnumerateRemoteFiles(
             $remotePath, $mask, [WinSCP.EnumerateOptions]::AllDirectories)

foreach ($fileInfo in $files)
{
    Write-Host "Downloading $($fileInfo.FullName) ..."
    $filePath = [WinSCP.RemotePath]::EscapeFileMask($fileInfo.FullName)
    $session.GetFiles($filePath, $localPath + "\*").Check() 
}

【问题讨论】:

标签: .net powershell ftp winscp winscp-net


【解决方案1】:
  1. 这是EnumerationOptions,不是EnumerateOptions

  2. Session.EnumerateRemoteFiles是一个方法,所以你需要在Session instance上调用它。

  3. path argument of Session.EnumerateRemoteFiles路径,而不是 URL:

    $remotePath = "/relevantfolder/"
    

【讨论】:

  • 谢谢 - 现在一切正常。非常感谢。
【解决方案2】:

补充 Martin Prikryl's effective solution:

您的问题归结为记错类型名称,它在 PowerShell 中直到 运行时 才会出现。

您可以使用 PowerShell 的 tab 补全 缓解该问题, 但是:

[winscp.enumerate<tab> # NO completion, because no such type exists.

[winscp.enumeration<tab> # -> completion to [WinSCP.EnumerationOptions]

请注意,补全甚至可以在没有命名空间组件的情况下工作(例如,[enumerationo&lt;tab&gt;]),但如果使用短名称或通用名称前缀,则可以循环通过许多匹配项。

相反,如果完成没有发生可能的原因是:

  • 实现目标类型的程序集尚未加载到会话中。

    • 使用Add-Type -Path / Add-Type -AssemblyName 加载它或Import-Module,如果它带有一个模块。
  • 您打错了类型名称(前缀)。

    • 使用制表符完成试验变体或查阅文档。

【讨论】:

    猜你喜欢
    • 2017-11-09
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多