SFTP Titel

SFTP unter Powershell

cropped Profilbild JoergKarstenVeröffentlicht von

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.

SFTP Powershell
$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
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
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

Kommentar hinterlassen