powershell upload automation sftp

Subir archivo a SFTP usando PowerShell



powershell ftp (3)

Utilizando pscp.exe de PuTTY (que tengo en un directorio $env:path ):

pscp -sftp -pw passwd c:/filedump/* user@host:/Outbox/ mv c:/filedump/* c:/backup/*

Nos pidieron configurar una carga automática desde uno de nuestros servidores a un sitio SFTP. Existirá un archivo que se exportará desde una base de datos a un archivador cada lunes por la mañana y ellos querrán que el archivo se cargue en SFTP el martes. El método de autenticación actual que estamos utilizando es el nombre de usuario y la contraseña (creo que también existía la opción de tener un archivo de clave, pero se eligió la opción nombre de usuario / contraseña).

La forma en que estoy visualizando esto es tener una secuencia de comandos instalada en un servidor que será activada por el programador de tareas de Windows para ejecutarse en un momento específico (martes) que tomará el archivo en cuestión y lo cargará al SFTP y luego lo moverá a un ubicación diferente para fines de copia de seguridad.

Por ejemplo:

  • Directorio local: C:/FileDump

  • Directorio SFTP: /Outbox/

  • Directorio de respaldo: C:/Backup

Intenté algunas cosas en este punto WinSCP siendo uno de ellos, así como SFTP PowerShell Snap-In pero nada me ha funcionado hasta ahora.

Esto se ejecutará en Windows Server 2012R2.
Cuando ejecuto Get-Host la versión Get-Host mi consola es 4.0.

Gracias.


Actualmente no hay un método PowerShell incorporado para hacer la parte de SFTP. Tendrá que usar algo como psftp.exe o un módulo de PowerShell como Posh-SSH.

Aquí hay un ejemplo usando Posh-SSH :

# Set the credentials $Password = ConvertTo-SecureString ''Password1'' -AsPlainText -Force $Credential = New-Object System.Management.Automation.PSCredential (''root'', $Password) # Set local file path, SFTP path, and the backup location path which I assume is an SMB path $FilePath = "C:/FileDump/test.txt" $SftpPath = ''/Outbox'' $SmbPath = ''//filer01/Backup'' # Set the IP of the SFTP server $SftpIp = ''10.209.26.105'' # Load the Posh-SSH module Import-Module C:/Temp/Posh-SSH # Establish the SFTP connection New-SFTPSession -ComputerName $SftpIp -Credential $Credential # Upload the file to the SFTP path Set-SFTPFile -SessionId 0 -LocalFile $FilePath -RemotePath $SftpPath # Disconnect SFTP session (Get-SFTPSession -SessionId 0).Disconnect() # Copy the file to the SMB location Copy-Item -Path $FilePath -Destination $SmbPath

Algunas notas adicionales:

  • Deberá descargar el módulo Posh-SSH que puede instalar en el directorio de su módulo de usuario (p. Ej., C: / Users / jon_dechiro / Documents / WindowsPowerShell / Modules) y cargar usando el nombre o colocarlo en cualquier parte y cargarlo como yo tener en el código de arriba.
  • Si no es aceptable tener las credenciales en el script, deberá usar un archivo de credencial. Si necesita ayuda, puedo actualizarla con algunos detalles o señalarle algunos enlaces.
  • Cambie las rutas, direcciones IP, etc. según sea necesario.

Eso debería darte un punto de partida decente.


No nos dijo qué problema particular tiene con el WinSCP, así que realmente solo puedo repetir lo que está en la documentación de WinSCP.

  • Descargue el ensamblado WinSCP .NET .
    El último paquete a partir de ahora es WinSCP-5.11.3-Automation.zip ;
  • Extraiga el archivo .zip largo de su script;
  • Use un código como este (basado en el ejemplo de carga oficial de PowerShell ):

    # Load WinSCP .NET assembly Add-Type -Path "WinSCPnet.dll" # Setup session options $sessionOptions = New-Object WinSCP.SessionOptions -Property @{ Protocol = [WinSCP.Protocol]::Sftp HostName = "example.com" UserName = "user" Password = "mypassword" SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" } $session = New-Object WinSCP.Session try { # Connect $session.Open($sessionOptions) # Upload $session.PutFiles("C:/FileDump/export.txt", "/Outbox/").Check() } finally { # Disconnect, clean up $session.Dispose() }

Puede hacer que WinSCP genere el script de PowerShell para la carga por usted:

  • Inicie sesión en su servidor con WinSCP GUI;
  • Navegue al directorio de destino en el panel de archivos remoto;
  • Seleccione el archivo para cargar en el panel de archivos local;
  • Invoca el comando Upload ;
  • En el cuadro de diálogo Opciones de transferencia , vaya a Configuración de transferencia> Generar código ;
  • En el cuadro de diálogo Generar código de transferencia, seleccione la pestaña Código de ensamblado .NET ;
  • Elija el idioma de PowerShell .

Obtendrás un código como el anterior con todas las configuraciones de sesión y transferencia completadas.

(Soy el autor de WinSCP)