使用PowerShell连接到Azure FTP时出现错误501,但可在C#中运行

时间:2019-04-11 20:23:22

标签: .net azure powershell ftp webclient

我尝试在PowerShell 5.1中使用WebClient将某些文件上传或下载到Azure AppService托管的网站。我从应用程序在Azure的PublishProfile中获取了FTP凭据和FTP URL,并使用下面的代码来完成任务,

$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(),它总是能给我

  

使用“ 2”个参数调用“ UploadFile”的异常:“远程服务器返回错误:(501)参数或参数中的语法错误。”   远程服务器返回错误:(501)参数或参数中的语法错误。

我尝试了另一个公共测试的FTP服务器URL,例如ftp.dlptest.com而不是Azure FTP URL,它工作得很好。有人遇到过这个问题吗?这是Azure应用服务的问题吗?

我还使用Azure FTP URL在C#代码中尝试了相同的方法,效果也很好。

应发布者的要求,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 个答案:

答案 0 :(得分:1)

您的C#代码显示您已经$登录了用户名。

$符号在双引号的PowerShell字符串中具有特殊含义。要使用文字$符号,您需要使用反斜杠对其进行转义:

$username = "`$somename"

或使用单引号:

$username = '$somename'

答案 1 :(得分:-1)

看起来您遇到了通常归因于被动数据传输的错误。

您是否尝试过使用FtpWebRequest?您可以使用它强制客户端上的被动连接。要么确保您的Azure FTP已配置为接受非被动连接。