Nous avons été invités à configurer un téléchargement automatisé d'un de nos serveurs vers un site SFTP. Un fichier sera exporté d’une base de données vers un fichier tous les lundis matins et ils souhaitent que le fichier soit chargé dans SFTP 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 permettant également d'avoir un fichier de clé, mais l'option nom d'utilisateur/mot de passe a été choisie).
La façon dont je l’envisage est d’avoir un script assis sur un serveur qui sera déclenché par le planificateur de tâches Windows pour s’exécuter à une heure précise (mardi) qui saisira le fichier en question, le téléchargera vers le SFTP, puis le déplacera vers un fichier. emplacement différent à des fins de 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 stade, WinSCP étant l'un d'entre eux ainsi que composant logiciel enfichable SFTP PowerShell mais rien n'a fonctionné pour moi jusqu'à présent.
Cela fonctionnera sur Windows Server 2012R2.
Quand je cours Get-Host
La version de mon hôte console est 4.0.
Merci.
Il n'y a pas actuellement de méthode PowerShell intégrée pour effectuer la partie SFTP. Vous devrez utiliser quelque chose comme psftp.exe ou un module PowerShell tel que 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:
Cela devrait vous donner un bon point de départ.
Vous ne nous avez pas dit quel problème particulier aviez-vous avec WinSCP, je ne peux donc que répéter ce qui est dans la documentation WinSCP.
WinSCP-5.15.4-Automation.Zip
;.Zip
archive le long de votre script;Utilisez un code comme celui-ci (basé sur le texte officiel exemple de téléchargement 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:\FileDump\export.txt", "/Outbox/").Check()
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
WinSCP peut générer pour vous le script PowerShell:
Vous obtiendrez un code comme ci-dessus avec tous les paramètres de session et de transfert renseignés.
(je suis l'auteur de WinSCP)
Utilisation de pscp.exe de PuTTY (que j'ai dans un $env:path
répertoire):
pscp -sftp -pw passwd c:\filedump\* user@Host:/Outbox/
mv c:\filedump\* c:\backup\*