PowerShell找不到重载。

6

我尝试使用https://sshnet.codeplex.com/,让PowerShell脚本上传文件到SFTP服务器。除了它找不到方法UploadFile的重载以外,似乎一切正常,这让我感到困惑。

方法的定义在这里。

TypeName   : Renci.SshNet.SftpClient
Name       : UploadFile
MemberType : Method
Definition : void UploadFile(System.IO.Stream input, string path, System.Action[uint64] uploadCallback),
             void UploadFile(System.IO.Stream input, string path, bool canOverride, System.Action[uint64] uploadCallback)

我正在尝试使用这个重载函数

UploadFile(System.IO.Stream input, string path, System.Action[uint64] uploadCallback)

uploadCallback 字段根据文档是可选的,在我的简单脚本中并不需要,但即使加上它也会失败。我尝试调用此方法的方式如下,它们全部失败。

我应该如何成功地调用这些方法?我尝试的示例如下。

示例

$client = New-Object Renci.SshNet.SftpClient($ftpHost, $ftpPort, $ftpUser, $ftpPass)
$client.Connect()

# ... get stream of file to upload here ...

$client.UploadFile($sourceStream, "$ftpPath$output")

执行失败

Cannot find an overload for "UploadFile" and the argument count: "2".
At F:\MyScript.ps1:170 char:2
+     $client.UploadFile($sourceStream, "$ftpPath$output")
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

以下所有尝试都以相同的错误消息失败:
$action = [System.Action[uint64]]
$client.UploadFile($sourceStream, "$ftpPath$output", $action)

错误
Cannot find an overload for "UploadFile" and the argument count: "3".
At F:\MyScript.ps1:170 char:2
+     $client.UploadFile($sourceStream, "$ftpPath$output", $action)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

尝试使用第三个参数为$null的方法
$client.UploadFile($sourceStream, "$ftpPath$output", $null)

失败原因:

Cannot find an overload for "UploadFile" and the argument count: "3".
At F:\MyScript.ps1:169 char:2
+     $client.UploadFile($sourceStream, "$ftpPath$output", $null)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

1
尝试使用 $client.UploadFile($sourceStream, "$ftpPath$output", [Action[uint64]]$null)。另外,$sourceStream是一个流吗?即$sourceStream -is [System.IO.Stream]是否返回True? - Keith Hill
1
把这篇文章的长度缩短一些可能会有所帮助。读者需要阅读很多内容才能理解问题的核心。或许可以重新组织文章,让一些更重要的细节放在开头。 - jpmc26
@KeithHill 那就是问题所在,我传递了一个 StreamReader 而不是一个 Stream。如果你填写一个答案,我会接受它,谢谢。 - Kirk
很好。我从评论中创建了一个答案。 - Keith Hill
1个回答

5
尝试在方法调用时提供类型信息作为转换,以帮助PowerShell更好地执行,例如:
$client.UploadFile($sourceStream, "$ftpPath$output", [Action[uint64]]$null)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接