Ошибка 501 при подключении к Azure FTP с PowerShell, но работает в C # - PullRequest
1 голос
/ 11 апреля 2019

Я пытался использовать WebClient в PowerShell 5.1 для загрузки или загрузки какого-либо файла на веб-сайт Azure AppService.Я получил учетные данные FTP и URL-адрес FTP из PublishProfile моего приложения в Azure и использовал приведенный ниже код для выполнения задачи:

$username = "$somename"
$password = "somepassword"
$webclient = New-Object -TypeName System.Net.WebClient
$webclient.Credentials = New-Object 
System.Net.NetworkCredential($username, $password)

$localfilename = "Temp.txt"

$destUrl = "ftp://waws-someaddress.ftp.azurewebsites.windows.net/site/wwwroot/PictureReview/temp.txt"

$uri = New-Object System.Uri($destUrl)

#Write-Host $uri

$webclient.UploadFile($uri, $localfilename)
$webClient.Dispose()

Однако, как я и пытался, при использовании UploadFile() или DownloadFile() он всегда даетme

Исключение вызывает "UploadFile" с аргументом (ами) "2": "Удаленный сервер возвратил ошибку: (501) Синтаксическая ошибка в параметрах или аргументах."Удаленный сервер возвратил ошибку: (501) Синтаксическая ошибка в параметрах или аргументах.

Я пробовал другой общедоступный тестируемый URL-адрес FTP-сервера, например ftp.dlptest.com вместо URL-адреса Azure FTP, и он работает очень хорошо,Кто-нибудь когда-нибудь сталкивался с этой проблемой?Является ли это проблемой службы приложений Azure?

Я также пробовал такой же подход в коде C # с URL-адресом FTP Azure, он также хорошо работает.

По запросу автора кода C #как показано ниже:

WebClient client = new WebClient(); 
client.Credentials = new NetworkCredential("$somename", "somepassword"); 
client.UploadFile("ftp://waws-someaddress.ftp.azurewebsites.windows.net/site/wwwroot/PictureReview/temp.txt", @"C:\users\blahblah\Desktop\temp.txt");

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Ваш код C # показывает, что в вашем имени пользователя есть знак $.

$ знак имеет специальное значение в строке PowerShell в двойных кавычках.Чтобы использовать буквальный знак $, вам необходимо экранировать его с помощью обратного галочки:

$username = "`$somename"

или использовать одинарные кавычки:

$username = '$somename'
0 голосов
/ 12 апреля 2019

Похоже, вы попали в ошибку, которая обычно приписывается пассивной передаче данных.

Вы пробовали использовать FtpWebRequest вместо этого?Используя это, вы можете принудительно установить пассивные соединения на клиенте.Либо это, либо убедитесь, что ваш Azure FTP настроен на прием непассивных подключений.

...