PowerShell 中的 WinSCP .NET 程序集 - 创建 SessionOptions - 提供的值无效,或属性为只读

Cra*_*eyS 3 .net ssh powershell winscp winscp-net

我正在尝试使用 PowerShell 使用 WinSCP 自动传输文件。我已经安装了 .NET 程序集。在我添加的代码中,我为了隐私取出了凭据和主机名,并且我还使用了WinSCPnet.dll. 这是我得到的错误:

错误:提供的值无效,或属性为只读。更改值,然后重试。

我$sessionOptions在第 5 行定义了这个。关于我可以做些什么来运行它的任何想法?

try
{
    Add-Type -Path "WinSCPnet.dll"

    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
        Protocol = [WinSCP.Protocol]::Sftp
        HostName = "HostName"
        UserName = "UserName"
        Password = "Password"
        SshHostKeyFingerprint = "ssh-rsa 2048 Fingerprint here"
    }

    $session = New-Object WinSCP.Session

    try
    {
        # Connect
        $session.Open($sessionOptions)

        # Upload files
        $transferOptions = New-Object WinSCP.TransferOptions
        $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary

        $transferResult =
            $session.PutFiles("Source", "Destination", $False, $transferOptions)

        # Throw on any error
        $transferResult.Check()

        # Print results
        foreach ($transfer in $transferResult.Transfers)
        {
            Write-Host ("Upload of {0} succeeded" -f $transfer.FileName)
        }
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }

    exit 0 
    }
catch [Exception]
{
    Write-Host ("Error: {0}" -f $_.Exception.Message)
    exit 1
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ryl 5

最可能的解释是 的值SessionOptions.SshHostKeyFingerprint无效,您的代码中没有其他属性经过验证。

使用 WinSCP GUI 函数生成代码模板以获得正确的值。

另请阅读有关自动主机密钥验证的信息。


如果您需要更多帮助,您必须向我们展示您使用的真实价值(它是服务器公钥的指纹,因此它是公开信息,无需隐藏)。