找不到类型 [WinSCP.EnumerateOptions]

Unable to find type [WinSCP.EnumerateOptions]

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

Unable to find type [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() 
}
  1. EnumerationOptions,不是EnumerateOptions

  2. Session.EnumerateRemoteFiles is a method, so you need to call it on Session instance.

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

    $remotePath = "/relevantfolder/"
    

补充 :

您的问题归结为记错了类型名称,在 PowerShell 中直到 运行时

才出现

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

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

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

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

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

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

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

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