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 esWinSCP-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.
(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*