打开WinSCP会话时,对象引用未设置为对象的实例

时间:2019-04-24 09:01:02

标签: powershell winscp winscp-net

我有一个PowerShell脚本,该脚本使用WinSCP .Net库从FTP服务器获取一些文件。

该脚本将使用Task Scheduler从管理员帐户在服务器上一整夜自动运行。

问题是有时(它没有模式,或者至少我无法弄清楚),它给我一个错误:“对象引用未设置为对象的实例”。

错误:

Exception calling "Open" with "1" argument(s): "Object reference not set to an
instance of an object."
At C:\user\blabla\powershellscript.ps1:47 
char:5
+     $session.Open($sessionOptions)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : NullReferenceException

代码中的实际行(第47行)是:$session.Open($sessionOptions)

如果我运行任务计划程序中的脚本或任务,它会平稳运行并且不会给我任何错误。

PowerShell脚本:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

$FileSourcePath = '/path_to_the_file'

Add-Type -Path "C:\WinSCP\WinSCPnet.dll"

# Set up session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::Sftp
    HostName = "ip_to_the_server"
    UserName = "correct_username"
    Password = "correct_password"
    SshHostKeyFingerprint = "correct_sshrsa_fingerprint"
}

$session = New-Object WinSCP.Session

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

    # Transfer files
    $session.GetFiles($FileSourcePath, $FileDestinationPath).Check()
} catch {
    $_ | Out-File c:\blabla\errors.txt -Append
} finally {
    $session.Dispose()
}

1 个答案:

答案 0 :(得分:-1)

我通过将脚本从“任务计划”移动到“ SQL Server代理”作业来解决此问题。现在可以正常使用了。

感谢您的所有反馈和建议。