Saltar al contenido

Cargar archivo a SFTP usando PowerShell

Solución:

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

  • Descargue el ensamblaje WinSCP .NET.
    El último paquete a partir de ahora es WinSCP-5.17.10-Automation.zip;

  • Extrae el .zip archivar a lo largo de su guión;

  • Use un código como este (basado en el ejemplo oficial de carga 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 xxxxxxxxxxx...="
      }
    
      $session = New-Object WinSCP.Session
    
      try
      {
          # Connect
          $session.Open($sessionOptions)
    
          # Upload
          $session.PutFiles("C:FileDumpexport.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 hasta el directorio de destino en el panel de archivos remoto;
  • Seleccione el archivo para cargar en el panel de archivos local;
  • Invocar el Subir mando;
  • En el cuadro de diálogo Opciones de transferencia, vaya a Transferir configuración> Generar código;
  • En el cuadro de diálogo Generar código de transferencia, seleccione el Código ensamblador .NET pestaña;
  • Escoger Potencia Shell idioma.

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

Generar diálogo de código de transferencia

(Soy el autor de WinSCP)

Actualmente no existe un método PowerShell integrado para realizar la parte 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:FileDumptest.txt"
$SftpPath="/Outbox"
$SmbPath="\filer01Backup"

# Set the IP of the SFTP server
$SftpIp = '10.209.26.105'

# Load the Posh-SSH module
Import-Module C:TempPosh-SSH

# Establish the SFTP connection
$ThisSession = New-SFTPSession -ComputerName $SftpIp -Credential $Credential

# Upload the file to the SFTP path
Set-SFTPFile -SessionId ($ThisSession).SessionId -LocalFile $FilePath -RemotePath $SftpPath

#Disconnect all SFTP Sessions
Get-SFTPSession | % { Remove-SFTPSession -SessionId ($_.SessionId) }

# Copy the file to the SMB location
Copy-Item -Path $FilePath -Destination $SmbPath

Algunas notas adicionales:

  • Tendrá que descargar el módulo Posh-SSH que puede instalar en el directorio de su módulo de usuario (por ejemplo, C: Users jon_dechiro Documents WindowsPowerShell Modules) y simplemente cargar usando el nombre o ponerlo en cualquier lugar y cargarlo como yo tener en el código anterior.
  • Si no es aceptable tener las credenciales en el script, tendrá que usar un archivo de credenciales. Si necesita ayuda con eso, puedo actualizar con algunos detalles o señalar algunos enlaces.
  • Cambie las rutas, direcciones IP, etc. según sea necesario.

Eso debería darte un punto de partida decente.

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

pscp -sftp -pw passwd c:filedump* [email protected]:/Outbox/
mv c:filedump* c:backup*
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *