shell powershell ftp cmd etl

traducir la solicitud de CMD FTP a la solicitud de FTP de PowerShell



etl (1)

Tengo una solicitud FTP que funciona completamente guardada en un archivo .CMD.

Aquí está mi script CMD:

@echo off setlocal set uname=exUsername set passw=exPassword set hostname=exHostname set filespec=exSpec echo %uname%> test.ftp echo %passw%>> test.ftp echo pwd>> test.ftp echo cd exDir>> test.ftp echo binary>> test.ftp echo get %filespec%>> test.ftp echo bye>> test.ftp ftp -s:test.ftp %hostname% if errorlevel 1 pause endlocal

Quiero traducir el código anterior a un script de PowerShell.

Aquí está mi script de PowerShell:

$uname = "exUsername" $passw = "exPassword" $hostname = "exHostname" $filespec = "exSpec" $dir = "exDir" $uri = "ftp://$uname`:$passw@$hostname/$dir/$filespec" $wc = New-Object System.Net.WebClient $wc.DownloadFile($uri, "C:/")

El script de My PowerShell hasta ahora no funciona. Aquí está mi error:

Excepción que llama a "DownloadFile" con "2" argumento (s): "Se produjo una excepción durante una solicitud We bClient". En línea: 20 char: 17 + $ wc.DownloadFile <<<< ($ uri, "C: /") + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: DotNetMethodException

Inicialmente pensé que estaba especificando una dirección FTP incorrecta, así que $uri valor de $uri en el explorador de Windows y llegué al servidor, pero noté que no había carpetas (visibles) disponibles para acceder.

Sin embargo, la misma $uri archivo $uri me está obteniendo el archivo solicitado a través del script CMD.

¿Alguna idea sobre dónde estoy yendo mal?

EDITAR - a petición de @KeithHill, modifiqué la secuencia de comandos para usar ftpWebRequest lugar de WebClient . El código está abajo, pero me aparece el siguiente error:

Excepción llamando a "GetResponse" con "0" argumento (s): "El servidor remoto devolvió un error: (431) 431 El mecanismo de seguridad requerido no está disponible en este momento." En la línea: 23 char: 39 + $ ftpresponse = $ ftprequest.GetResponse <<<< () + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: DotNetMethodException El término ''Write-Out'' no se reconoce como el nombre de un cmdlet, función, archivo de script o programa operable. Verifique la ortografía del nombre, o si se incluyó una ruta, verifique que la ruta sea correcta y vuelva a intentarlo.

Código a continuación:

$uname = "exUsername" $passw = "exPassword" $hostname = "exHostname" $filespec = "exSpec" $dir = "exDir" $uri = "exUri" # Create an FTPWebRequest object to handle the connection to the FTP server $ftprequest = [System.Net.FtpWebRequest]::Create($uri) # Set the request''s network credentials for an authenticated connection $ftprequest.Credentials = New-Object System.Net.NetworkCredential($uname,$passw) # Set FTPWebRequest method to ListDirectory $ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::ListDirectory $ftprequest.EnableSsl = $True $ftprequest.UseBinary = $True $ftprequest.UsePassive = $True $ftprequest.KeepAlive = $False $ftpresponse = $ftprequest.GetResponse() Write-Out $ftpresponse.StatusCode Write-Out $ftpresponse.StatusDescription


Para DownloadFile , el segundo parámetro debe ser un nombre de archivo como "c:/$filespec" y no solo un especificador de unidad.