Не могу заставить файловую маску работать должным образом в многострочной командной строке WinSCP в PowerShell - PullRequest
1 голос
/ 28 апреля 2020

Я пытаюсь использовать WinSCP для создания сценария PowerShell для автоматизации передачи SFTP. Я могу подключиться и делать простые передачи, но я хочу передавать только вчерашние файлы. Для этого мне нужна файловая маска, которую я не могу получить.

Ниже приведен мой код. Я беру этот скрипт, помещаю его в Notepad ++, сохраняю как скрипт PowerShell и запускаю. Часть соединения SFTP работает, поскольку я использовал это, чтобы захватить все файлы на SFTP. Так что я уверен, что это часть маски файла.

& "C:\Program Files (x86)\WinSCP\WinSCP.com" `
  /log="\\blah\blah\users\vmedhe\thing.log" /ini=nul `
  /command `
    "open sftp://username:password@sftpsite -hostkey=`"`"not real host key=`"`"" `
    "cd /" `
    "lcd C:\Test_case" ` 
    "get -filemask=`"`">yesterday`"`" shares" `
    "get -filemask=`"`">yesterday`"`" *.*" `
    "exit"

$winscpResult = $LastExitCode
if ($winscpResult -eq 0)
{
  Write-Host "Success"
}
else
{
  Write-Host "Error"
}

exit $winscpResult

К сожалению, я продолжаю получать ошибки:

At C:\Powershell_Scripts\mXpress_main.PS1:9 char:2
+     "get -filemask=`"`">yesterday`"`" *.*" `
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Unexpected token '"get -filemask=`"`">yesterday`"`" *.*"' in expression or statement. At C:\Powershell_Scripts\mXpress_main.PS1:10 char:5
+     "exit"
+     ~~~~~~ Unexpected token '"exit"' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : UnexpectedToken

Что-то не так с моей маской, но я не уверен, что это такое. Любая помощь будет потрясающей.

Ответы [ 2 ]

2 голосов
/ 28 апреля 2020

Это не маска файла. - У вас есть пробел после обратного кавычка в (казалось бы) конце строки lcd.

Таким образом, обратный кэш экранирует пробел, а не перевод строки. Следовательно, строка get интерпретируется как новая строка кода PowerShell.

По сути, это эквивалент PowerShell этой общей проблемы WinSCP с пакетным файлом:
https://winscp.net/eng/docs/faq_batch_file#newline_escaping


Хотя в целом в PowerShell, вы должны использовать WinSCP. NET сборка .

0 голосов
/ 28 апреля 2020

Спасибо, это действительно было проблемой. Ниже приведен окончательный код для всех будущих Google.

& "C:\Program Files (x86)\WinSCP\WinSCP.com" `
  /log="\\blah\blah\users\fake\thing.log" /ini=nul `
  /command `
    "open sftp://username:password@sftpname/ -hostkey=`"`"junk host key=`"`"" `
    "cd /" `
    "lcd C:\test_area" `
    "get -filemask=`"`">yesterday`"`" shares" `
    "get -filemask=`"`">yesterday`"`" *.*" `
    "exit"

$winscpResult = $LastExitCode
if ($winscpResult -eq 0)
{
  Write-Host "Success"
}
else
{
  Write-Host "Error"
}

exit $winscpResult  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...