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.