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.
![](https://blue-pc.net/wp-content/uploads/2022/12/SFTP-Install-1024x546.png)
Sollte dabei folgende Fehlermeldung erscheinen muss vorher TLS 1.2 aktiviert werden. Dies ist meistens in älteren Umgebungen notwendig.
![](https://blue-pc.net/wp-content/uploads/2022/12/SFTP-TLS-Failure.png)
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.
![SFTP Powershell](https://blue-pc.net/wp-content/uploads/2022/12/SFTP-Login-1024x546.png)
$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
![Test SFTP Powershell](https://blue-pc.net/wp-content/uploads/2022/12/SFTP-Verzeichnisse-1024x546.png)
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
![Upload SFTP Powershell](https://blue-pc.net/wp-content/uploads/2022/12/SFTP-Up-Download-1024x546.png)
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