es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener nombre de archivo desde el servidor FTP.

Estoy utilizando el siguiente código de Powershell para consultar una carpeta FTP y obtener el nombre del archivo existente. Sin embargo, no obtengo la salida deseada. Obtengo algunos resultados no deseados del código. Agradecería ayuda para obtener solo el nombre del archivo.

Código:

$username='Th1sUser'
$password='Th1sPas3'
$ftpuri='ftp://repo.ftpserver.com/Installer'

$uri=[System.URI] $ftpuri
$ftprequest=[System.Net.FtpWebRequest]::Create($uri)

$ftprequest.Credentials=New-Object System.Net.NetworkCredential($username,$password)

$ftprequest.Method=[System.Net.WebRequestMethods+Ftp]::ListDirectory
$response=$ftprequest.GetResponse()
$strm=$response.GetResponseStream()

$reader=New-Object System.IO.StreamReader($strm,'UTF-8')
$list=$reader.ReadToEnd()

Write-Host "$list"

Resultado:

Installer/.
Installer/..
Installer/Installerv1.exe

Me gustaría obtener “Installerv1.exe” como el nombre del archivo. Además, ¿existe la posibilidad de obtener el nombre del archivo .exe más reciente de ese directorio si hay varios archivos y obtener ese nombre de archivo? Gracias de antemano.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para obtener solo el nombre de archivo, puede utilizar el siguiente código:

    $filename = ($list -split "\r?\n" | Select-Object -Last 1).TrimStart("Installer/")
    

    Esto dividirá la variable $list en un array en cada salto de línea (\r?\n), seleccionará el último elemento del array (que debería ser el nombre de archivo) y luego eliminará el prefijo "Installer/" utilizando el método TrimStart().

    Para obtener el archivo .exe más reciente, puede modificar el código de la siguiente manera:

    $filename = ($list -split "\r?\n" | ? { $_ -match "^\S+\.exe$" } | Sort-Object LastWriteTime -Descending | Select-Object -First 1).TrimStart("Installer/")
    

    Esto utiliza una expresión regular para filtrar las líneas que terminan con .exe y luego las ordena por la propiedad LastWriteTime (suponiendo que el servidor FTP lo soporte) en orden descendente. El primer archivo (es decir, el más reciente) se selecciona utilizando el comando Select-Object -First 1.

Comments are closed.