Ошибка загрузки Powershell ftp 530 не авторизован - PullRequest
7 голосов
/ 25 февраля 2010

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

$sourceuri = "ftp://ftp.example.com/myfolder/myfile.xml"
$username = "user"
$password = "password"

# Create a FTPWebRequest object to handle the connection to the ftp server
$ftprequest = [System.Net.FtpWebRequest]::create($sourceuri)

$credentials = New-Object System.Net.NetworkCredential($username,$password)
# set the request's network credentials for an authenticated connection
$ftprequest.Credentials = $credentials

$ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
$ftprequest.UseBinary = 1
$ftprequest.KeepAlive = 0

# read in the file to upload as a byte array
$content = gc -en byte $fileName
$ftprequest.ContentLength = $content.Length
# get the request stream, and write the bytes into it
$rs = $ftprequest.GetRequestStream()
$rs.Write($content, 0, $content.Length)
# be sure to clean up after ourselves
$rs.Close()
$rs.Dispose()

Я получаю следующую ошибку:

Exception calling "GetRequestStream" with "0" argument(s): "The remote server returned an   error: (530) Not logged in."
At C:\temp\copyfile.ps1:63 char:35
+ $rs = $ftprequest.GetRequestStream( <<<< )

Я могу легко подключиться к нему через IE, поэтому подумал, что, может быть, что-то еще не так, сделал это быстро в C #:

        string filePath = @"C:\temp\myfile.xml";
        string FTPAddress = @"ftp://ftp.example.com/myfolder";
        FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(FTPAddress + "/" + Path.GetFileName(filePath));
        request.Method = WebRequestMethods.Ftp.UploadFile;
        string username = "user";
        string password = "password";
        request.Credentials = new NetworkCredential(username, password);
        request.UsePassive = true;
        request.UseBinary = true;
        request.KeepAlive = false;

        FileInfo file = new FileInfo(filePath);
        request.ContentLength = file.Length;
        int buffLength = 2048;
        byte[] buff = new byte[buffLength];
        int contentLen;

        FileStream fs = file.OpenRead();

        Stream strm = request.GetRequestStream();
        contentLen = fs.Read(buff, 0, buffLength);
        while(contentLen !=0 )
        {
            strm.Write(buff, 0, contentLen);
            contentLen = fs.Read(buff, 0, buffLength);
        }

        strm.Close();
        fs.Close();

C # работает отлично, не уверен, почему это не работает, и надеется, что кто-то сможет указать на мою ошибку

EDIT

Решил, новый, это было бы что-то глупое. На пароле был знак «$», он был в двойных кавычках, но я не знал, что его нужно будет экранировать, просто не думал об этом вообще. По иронии судьбы мне пришлось сменить пароль и т. Д., Чтобы было безопасно отправлять сообщения.

Ответы [ 2 ]

2 голосов
/ 27 июля 2014

Из оригинального плаката Джон :

Решил, новый, это было бы что-то глупое. На пароле был знак «$», он был в двойных кавычках, но я не знал, что его нужно будет экранировать, просто не думал об этом. По иронии судьбы мне пришлось сменить пароль и т. Д., Чтобы было безопасно отправлять сообщения.

1 голос
/ 24 августа 2017

просто удалите двойную кавычку из имени пользователя или пароля, потому что иногда знак $ вызывает проблемы. Хорошо использовать одинарную кавычку каждый раз.

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