Datei hochladen mit WinSCP

Neulich musste ich mal wieder eine Datei auf einen SFTP Server hochladen. Und wie es immer so ist, ich konnte mich nur noch teilweise daran errinern wie es geht ­čÖé

Ich wusse noch das ich WINSCP f├╝r den Upload benutzt hatte und wie h├╝bsch einfach die Powershell API ist. WINSCP ist so nett und liefert gleich eine .Net Library mit, die man einfach in jedem Powershell ├╝ber Add-Type einlinken kann.

Zur Vorbereitung, um die Library nutzen zu k├Ânnen, braucht man nat├╝rlich erstmal den Host Name vom Server sowie User und Passwort. Zus├Ątzlich braucht man aber auch den Fingerprint des jeweiligen Server Schl├╝ssels. Hierf├╝r empfehle ich einfach mit der Oberfl├Ąche von WinSCP mal eine Verbindung zu dem Server aufzubauen und unter dem Men├╝punkt Sessions/Info den Finterprint nachzusehen, der Fingerprint sieht dann ungef├Ąhr so aus: 69:32:29:58:c0:21:7d:b3:6d:0f:8a:0d:48:ce:e5:f2

Nun aber zum Script, wie immer bei einem Upload sollte man damit beginnen den Ziel Ordner zu ├╝berpr├╝fen, ob man die Daten ├╝berhaupt dort hinkopieren kann. Sprich welche Dateien liegen den im Zielordner so herum:

#add the library
Add-Type -Path $p_path_to_winscp
 
#preset the options for the session
$session_opt = New-Object WinSCP.SessionOptions
$session_opt.Protocol = [WinSCP.Protocol]::Sftp
$session_opt.HostName = "Server.irgendwo.de"
$session_opt.UserName = "Username"
$session_opt.Password = "Password"
$session_opt.SshHostKeyFingerprint = "ssh-rsa 2048 " + "69:32:29:58:c0:21:7d:b3:6d:0f:8a:0d:48:ce:e5:f2"
 
#create the session object
$session = New-Object WinSCP.Session	
 
# Connect with the set parameters
$session.Open($session_opt)
 
#query for target directory
$directory = $session.ListDirectory("Mein Zielordner auf dem Server")
 
foreach ($fileInfo in $directory.Files){
 
	#debugging
	Write-Host ("{0} with size {1}, permissions {2} and last modification at {3}" -f $fileInfo.Name, $fileInfo.Length, $fileInfo.FilePermissions, $fileInfo.LastWriteTime)
}

Soweit so gut, und jetzt wollen wir ja noch eine Datei hochladen und das sieht dann in etwa so aus:

 
# Set the transfer options, Binary is always a good choice
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
 
$transferResult = $session.PutFiles("Path to local file", $False, $transferOptions)		
 
# Throw on any error
$transferResult.Check()		
 
# Disconnect, clean up
$session.Dispose()

Und fertig ist der Upload ­čÖé

http://www.agile-coding.net/datei-hochladen-mit-winscp/