Non riesco a far funzionare uno script PowerShell. Sono molto nuovo a PowerShell quindi potrebbe mancare qualcosa di stupido.Errore di caricamento ftp Powershell 530 non registrato
$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()
ottengo il seguente errore:
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(<<<<)
posso collegare tramite IE ad esso facilmente in modo pensato che forse qualcosa non andava così ha fatto in fretta in 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();
Il C# funziona perfettamente, non è sicuro del motivo per cui questo non funziona e spero che qualcuno possa essere in grado di segnalare il mio errore
EDIT
Risolto, nuovo sarebbe qualcosa di stupido. La password aveva un segno "$", era tra virgolette, ma non avevo capito che avrebbe dovuto essere scappato, semplicemente non ci pensava affatto. Ironia della sorte ho dovuto cambiare la password ecc in modo che fosse sicuro di postare.
Non riesco a vedere nulla. L'unica differenza è che usi 'UsePassive' nella tua soluzione C#. Per evitare errori potresti usare 'Set-StrictMode -version ...' per evitare variabili non inizializzate (= errori di battitura), ma in questo caso penso che non porterà nulla di nuovo. – stej
Ciao Stej, grazie per la risposta. Sono contento che non sia solo io, ho provato a replicare il C# in PowerShell. – Jon
Molti errori portano a 'problema $' con virgolette doppie :) – stej