我尝试在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");
答案 0 :(得分:1)
您的C#代码显示您已经$
登录了用户名。
$
符号在双引号的PowerShell字符串中具有特殊含义。要使用文字$
符号,您需要使用反斜杠对其进行转义:
$username = "`$somename"
或使用单引号:
$username = '$somename'
答案 1 :(得分:-1)
看起来您遇到了通常归因于被动数据传输的错误。
您是否尝试过使用FtpWebRequest?您可以使用它强制客户端上的被动连接。要么确保您的Azure FTP已配置为接受非被动连接。