Télécharger le fichier vers SFTP en utilisant PowerShell
on nous a demandé de mettre en place un téléchargement automatisé d'un de nos serveurs vers un site SFTP. Il y aura un fichier exporté d'une base de données à un déclarant tous les lundis matin et ils veulent que le fichier soit téléchargé à SFTP le mardi. La méthode d'authentification actuelle que nous utilisons est le nom d'utilisateur et le mot de passe (je crois qu'il y avait une option pour avoir le fichier clé aussi bien que l'option Nom d'utilisateur/mot de passe a été choisie).
la façon dont j'envisage ceci est d'avoir un script Assis sur un serveur cela sera déclenché par le planificateur de tâches Windows à exécuter à un moment précis (mardi) qui saisira le fichier en question le télécharger dans la SFTP et ensuite le déplacer à un endroit différent pour les besoins de la sauvegarde.
Par exemple:
Répertoire Local:
C:FileDump
répertoire SFTP:
/Outbox/
Répertoire De Sauvegarde:
C:Backup
j'ai essayé peu de choses à ce point WinSCP étant l'un d'eux ainsi que SFTP PowerShell Snap-In mais rien n'a fonctionné pour moi jusqu'à présent.
ce sera exécuté sur Windows Server 2012R2.
Quand je run Get-Host
ma version hôte de la console est 4.0.
Merci.
3 réponses
il n'y a pas actuellement de méthode PowerShell intégrée pour faire la partie SFTP. Vous devrez utiliser quelque chose comme psftp.exe ou un module PowerShell comme Posh-SSH.
voici un exemple utilisant 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
$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
Quelques notes supplémentaires:
- vous devrez télécharger le module Posh-SSH que vous pouvez installer dans le répertoire de votre module utilisateur (par exemple: C:\Users\jon_dechiro\Documents\WindowsPowerShell\Modules) et il suffit de charger à l'aide du le nom ou le mettre n'importe où et de le charger comme j'ai le code ci-dessus.
- si la présence des justificatifs d'identité dans le script n'est pas acceptable, vous devrez utiliser un fichier de justificatifs d'identité. Si vous avez besoin d'aide avec cela, je peux mettre à jour avec quelques détails ou vous indiquer certains liens.
- Modifier les chemins d'accès, IPs, etc. en tant que de besoin.
cela devrait vous donner un bon point de départ.
vous ne nous avez pas dit quel problème particulier avez-vous avec WinSCP, donc je ne peux vraiment que répéter ce qui est dans la documentation WinSCP.
- Download WinSCP. net assembly.
Le dernier train de mesures pour l'instant estWinSCP-5.13.4-Automation.zip
; - Extrait
.zip
archive le long de votre script; utilisez un code comme celui-ci (basé sur letéléchargement de PowerShell exemple):
# 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() }
vous pouvez demander à WinSCP de générer le script PowerShell pour le téléchargement:
- Connexion à votre serveur avec WinSCP GUI;
- Naviguer vers le répertoire cible dans le fichier distant panneau;
- Sélectionner le fichier à télécharger dans le fichier local du panneau;
- Invoquez le Télécharger commande;
- Sur le dialogue D'options de transfert, aller à Paramètres De Transfert > Générer Du Code;
- dans la boîte de dialogue Générer le code de transfert, sélectionnez .net code d'assemblage onglet;
- Choisir PowerShell langue.
vous obtiendrez un code comme ci-dessus avec tous les paramètres de session et de transfert remplis.
(je suis l'auteur de WinSCP)
en utilisant Mastic de pscp.exe (que j'ai dans un $env:path
répertoire):
pscp -sftp -pw passwd c:\filedump\* user@host:/Outbox/
mv c:\filedump\* c:\backup\*