Wenn man in einem Powershell Script per SFTP Dateien hochladen will, kann man dies mit dem Modul Posh-SSH durchführen.
Installation
Um Daten per Powershell per SFTP abzurufen oder zu kopieren kann man das Modul Posh-SSH verwenden. Die Installation ist relativ einfach. Einfach das Modul mit Install-Module installieren und die Quelle als Vertrauenswürdig bestätigen.
Sollte dabei folgende Fehlermeldung erscheinen muss vorher TLS 1.2 aktiviert werden. Dies ist meistens in älteren Umgebungen notwendig.
Dazu einfach folgenden Befehl in der Powershell eingeben und nochmal versuchen das Modul zu installieren.
#[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 Install-Module -Name Posh-SSH
Verbindungsaufbau
Die Verbindung wird mit New-SFTPLocation aufgebaut und in eine Sessionvariable gesepeichert. Dabei werden die Credentials abgefragt. Sie können aber auch wie im Artikel Powershell – Passwort in einer Datei Abspeichern in eine Datei gespeichert werden und hier wieder verwendet werden.
$SFTPSession = New-SFTPSession -ComputerName <IP oder DNS Name> -Credential (Get-Credential)
Befehle
Danach sollte die Verbindung offen sein. Nun kann man über die Sessionvariable $SFTPSession die folgenden Befehle verwenden.
- Get-SFTPLocation – Abruf des aktuellen Verzeichnisses auf dem SFTP Server
- Get-SFTPChildItem – Auflistung der Unterverzeichnisse auf dem SFTP Server
Get-SFTPLocation -SessionId $SFTPSession.SessionId Get-SFTPChildItem -SessionId $SFTPSession.SessionId
Der Upload und Download ist ziemlich identisch. Das überschreiben von vorhandenen Dateien muss mit dem Parameter -Force bestätigt werden.
- Set-SFTPItem – Übertragung einer Datei auf den SFTP Server
- Get-SFTPItem – Download einer Datei
Set-SFTPItem -SessionId $SFTPSession.SessionId -Path C:\TEMP\test.txt -Destination /web Set-SFTPItem -SessionId $SFTPSession.SessionId -Path C:\TEMP\test.txt -Destination /web -Force Get-SFTPItem -SessionId $SFTPSession.SessionId -Path /web/test.txt -Destination C:\TEMP Get-SFTPItem -SessionId $SFTPSession.SessionId -Path /web/test.txt -Destination C:\TEMP -Force
Alle Befehle findet man in der PowerShell Gallery von Posh-SSH.
Verbindung Trennen
Am Ende sollte man seine Verbindung noch trennen. Dies geschieht einfach mit dem Befehl Remove-SFTPSession und der Angebe der Sessionvariable. Als Antwort sollte ein einfaches True erscheinen.
# Verbindung trennen Remove-SFTPSession -SessionId $SFTPSession.SessionId
Ein Kommentar