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.

Subir conjunto de archivos utilizando WinSCP. Sesión en PowerShell.

Estoy tratando de cargar tres archivos específicos y recibir comentarios sobre las tres transferencias.
Con el código que tengo, solo obtengo:

Carga de \xxxxxxxxxxxxxxxxxxx\Customerlocations.txt exitosa

Entiendo que no está agregando transferencias a la sesión, sino reemplazándola cada vez.
Simplemente no sé cómo ajustarlo para obtener 3 transferencias en $transferResult.Transfers.

¿Alguien puede indicarme la dirección correcta?

“`

<h1>Configurar opciones de sesión</h1>

$sessionOptions = New-WinSCPSessionOption -Protocol Ftp <code>
-FtpSecure Implicit</code>
-Credential xxxxxxxxxxxxxxxxxxx <code>
-HostName "xxxxxxxxxxxxxxxxxxx "</code>
-TlsHostCertificateFingerprint "xxxxxxxxxxxxxxxxxxx "

$session = New-Object WinSCP.Session
$session.ExecutablePath = "C:\xxxxxxxxxxxxxxxxxxx\WinSCP.exe"
try
{
# Conectar
$session.Open($sessionOptions)

<pre><code># Descargar archivos
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary

$transferResult =
$session.PutFiles("\\xxxxxxxxxxxxxxxxxxx\Orders.txt", "/Orders.txt", $False, $transferOptions)
$transferResult =
$session.PutFiles("\\xxxxxxxxxxxxxxxxxxx\Assortment.txt", "/Assortment.txt", $False, $transferOptions)
$transferResult =
$session.PutFiles("\\xxxxxxxxxxxxxxxxxxx\Customerlocations.txt", "/Customerlocations.txt", $False, $transferOptions)

# Lanzar error en caso de cualquier error
$transferResult.Check()

# Imprimir resultados
foreach ($transfer in $transferResult.Transfers)
{
Write-Host "Carga de $($transfer.FileName) exitosa"
}

# Desconectar, limpiar
$session.Dispose()
</code></pre>

}
finally
{
$session.Dispose()
}
“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para cargar los tres archivos y obtener comentarios para cada transferencia, debes agregar cada llamada de PutFiles a la misma variable $transferResult en lugar de sobrescribirla cada vez. Modifica el código de la siguiente manera:

    # Subir archivos
    $transferResult =  $session.PutFiles("\\xxxxxxxxxxxxxxxxxxx\Orders.txt", "/Orders.txt", $False, $transferOptions)
    $transferResult += $session.PutFiles("\\xxxxxxxxxxxxxxxxxxx\Assortment.txt", "/Assortment.txt", $False, $transferOptions)
    $transferResult += $session.PutFiles("\\xxxxxxxxxxxxxxxxxxx\Customerlocations.txt", "/Customerlocations.txt", $False, $transferOptions)
    
    # Imprimir resultados
    foreach ($transfer in $transferResult.Transfers)
    {
        Write-Host "Carga de $($transfer.FileName) $($transfer.IsSuccess.ToString().ToUpper())"
    }
    

    Al utilizar el operador += para agregar a $transferResult, cada llamada a PutFiles agrega transferencias a la misma variable. Luego, el bucle foreach itera sobre cada transferencia en $transferResult.Transfers y muestra el nombre de archivo y el estado de éxito.

Comments are closed.