2017-04-24 9 views
1

我試圖使用PowerShell自動執行與WinSCP文件的傳輸。我已經安裝了.NET程序集。在我添加的代碼中,我已經取出了憑據和主機名以獲得隱私,並且我還使用了WinSCPnet.dll的完整路徑。下面是我得到的錯誤:PowerShell中的WinSCP .NET程序集 - 創建SessionOptions - 提供的值無效,或屬性爲只讀

Error: The value supplied is not valid, or the property is read-only. Change the value, and then try again.

我得到這個地方$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 
} 

回答

2

最可能的解釋是,SessionOptions.SshHostKeyFingerprint值是無效的,在你的代碼中沒有其他財產進行驗證。

使用WinSCP GUI功能generate a code template以獲得正確的值。另外請參閱:Automatic host key verification


如果您需要更多的幫助,你必須向我們展示您使用的是真正的價值(這是一個服務器公共密鑰的指紋,因此它是一個公共信息,沒有必要把它藏起來)。

相關問題