У меня есть сценарий PowerShell, который использует библиотеку WinSCP .Net для получения некоторых файлов с FTP-сервера.
Сценарий автоматически запускается на сервере ночью из учетной записи администратора с помощью планировщика задач.
Проблема в том, что иногда (у него нет шаблона или, по крайней мере, я не могу понять его), он выдает мне ошибку: «Ссылка на объект не установлена на экземпляр объекта».
Ошибка:
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()
}