Переименование файла на SFTP-сервере с помощью сборки WinSCP .NET в PowerShell

Следующая ошибка возникает при попытке переместить файл из одной папки (папки загрузки) в другую (архив), которая доступна на сервере SFTP с использованием сборки WinSCP .NET в PowerShell:

You cannot call a method on a null-valued expression.
At C:\Attendance Integration\Scripts\Power Shell 
 Script\Download&MoveToArchive.ps1:28 char:5
+     $Sftp.RenameRemoteFile($existingFilepath,$newFilepath)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

Ниже приведен код, который я использую для передачи файла:

# Connect
$session.Open($sessionOptions)

$existingFilepath = "/upload/attendance v2-201709220930.csv"
$newFilepath = "/Archive/attendance v2-201709220930.csv"

# Transfer files
$session.GetFiles($existingFilepath,"C:\Transfer Files\Attendance Files\*").Check()

$Sftp.RenameRemoteFile($existingFilepath,$newFilepath)

person Ratnesh Sharma    schedule 11.10.2017    source источник
comment
Помог ли мой ответ? (как я вижу, вы задали новый вопрос)   -  person Martin Prikryl    schedule 11.10.2017


Ответы (2)


Используйте Session.MoveFile метод:

$session.MoveFile($existingFilepath, $newFilepath)

Ваш код не имеет смысла:

$Sftp.RenameRemoteFile($existingFilepath,$newFilepath)
  • В вашем коде нет переменной $sftp
  • Сборка WinSCP .NET не имеет RenameRemoteFile метода.
person Martin Prikryl    schedule 11.10.2017
comment
Привет, @martin! Это ошибка, которую я получаю, когда включаю $ session.MoveFile ----------- Вы не можете вызвать метод для выражения с нулевым значением. В C: \ Ratnesh \ Projects \ DCB-Bank \ Attendance Integration \ Scripts \ Power Shell Script \ Download & MoveToArchive.ps1: 25 символов: 5 + $ session.MoveFile ($ existingFilepath, $ newFilepath) .Check () + ~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: InvokeMethodOnNull - person Ratnesh Sharma; 12.10.2017
comment
Вы звоните $session.MoveFile сразу после $session.GetFiles? GetFiles работает, а MoveFile не работает? Покажите нам свой полный код. - person Martin Prikryl; 12.10.2017
comment
Следующий код работает: `# Загрузить файлы $ session.GetFiles ($ existingFilepath, $ localpath) .Check () # Переместить файлы из папки загрузки в архивную папку $ session.MoveFile ($ existingFilepath, $ newFilepath)` - person Ratnesh Sharma; 12.10.2017

Вам не хватает назначения для $Sftp.

person Martin Brandl    schedule 11.10.2017
comment
Где мне не хватает назначения «$ Sftp»? - person Ratnesh Sharma; 11.10.2017
comment
Я этого нигде не вижу. Я не знаком с sftp, но вам нужно где-то назначить $Sftp, прежде чем вы сможете вызывать RenameRemoteFile - person Martin Brandl; 11.10.2017