我有一个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()
}
答案 0 :(得分:-1)
我通过将脚本从“任务计划”移动到“ SQL Server代理”作业来解决此问题。现在可以正常使用了。
感谢您的所有反馈和建议。