Después de un poco de experimentación, se me ocurrió esta manera de automatizar una descarga de FTP segura en PowerShell. Este script se ejecuta en el public test FTP server administrado por Chilkat Software. Entonces puede copiar y pegar este código y se ejecutará sin modificaciones.
$sourceuri = "ftp://ftp.secureftp-test.com/hamlet.zip"
$targetpath = "C:\hamlet.zip"
$username = "test"
$password = "test"
# Create a FTPWebRequest object to handle the connection to the ftp server
$ftprequest = [System.Net.FtpWebRequest]::create($sourceuri)
# set the request's network credentials for an authenticated connection
$ftprequest.Credentials =
New-Object System.Net.NetworkCredential($username,$password)
$ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile
$ftprequest.UseBinary = $true
$ftprequest.KeepAlive = $false
# send the ftp request to the server
$ftpresponse = $ftprequest.GetResponse()
# get a download stream from the server response
$responsestream = $ftpresponse.GetResponseStream()
# create the target file on the local system and the download buffer
$targetfile = New-Object IO.FileStream ($targetpath,[IO.FileMode]::Create)
[byte[]]$readbuffer = New-Object byte[] 1024
# loop through the download stream and send the data to the target file
do{
$readlength = $responsestream.Read($readbuffer,0,1024)
$targetfile.Write($readbuffer,0,$readlength)
}
while ($readlength -ne 0)
$targetfile.close()
He encontrado una gran cantidad de información útil en estos enlaces
Si desea utilizar una conexión SSL es necesario agregar la línea
$ftprequest.EnableSsl = $true
al script antes de llamar a GetResponse(). A veces puede necesitar lidiar con un certificado de seguridad del servidor caducado (como desafortunadamente lo hago). Hay una página en el PowerShell Code Repository que tiene un fragmento de código para hacer eso. Las primeras 28 líneas son las más relevantes para descargar un archivo.
eso es una cuarta opción válida que debería haber pensado. Si va a saber el nombre del archivo con anticipación, esta es ciertamente una buena solución y debe aceptarla como la respuesta. – EBGreen