ralpht
Goto Top

SFTP-Upload per Posh-SSH - Fehler

Moin,

ich benötige ein PS-Script, welches mir ein paar Dateien zu einem externen FTP-Server hochkopiert. Bislang habe ich hier ein Script, das funktioniert aber nur für FTP. Bei IONOS wird SFTP demnächst benötigt.
Im Netz gibt es wohl so ein paar Vorschläge, aber irgendwie habe ich nichts passendes gefunden.
Nun habe ich gestern ein Script gefunden (https://learn.microsoft.com/en-us/answers/questions/969674/transfer-file ..), was ich leider abändern muss. Was ich bei diesem gut finde ist, dass das Passwort nicht im Klartext im Script steht. Ich habe versucht mit meinen Minimalkenntnissen aus zwei Scripte eins zu basteln. Funktioniert natürlich nicht.

Das Problem sind diese Zeilen:

foreach($item in (dir $LocalPath "*.txt")){
"Uploading $item..."
$uri = New-Object System.Uri($ComputerName+$SftpPath+$item.Name)
$webclient.UploadFile($uri, $item.FullName)
}


Die habe ich aus dem alten Script entnommen. Da ich keine Ahnung von PS habe, ist es für mich schwierig das zum Laufen zu bekommen. Vielleicht wäre einer/eine so nett und könnte das mit wenig Zeilen zum Laufen zu bringen.
Die Anwahl zum Server funktioniert soweit.

Hier das ganze Script, was aber nicht funktioniert.

# Hier den FTP-Host eintragen
$ComputerName = "server-ftp.de"  

# Import Modul Posh-SSH
Import-Module Posh-SSH
  
# Define UserName  
$username = "ftp_user"  

# Hier das verschlüsselte Passwort eintragen
$encrypted = "4312d42412f54"    
  
$password = ConvertTo-SecureString -String $encrypted

#Set Credetials to connect to server
$Credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $username, $password  

# Hier die Verzeichnisse Lokal und FTP-Server eintragen
$LocalPath = "C:\UPLOAD\"  
$SftpPath = '/www/'  

# Establish the SFTP connection
$SFTPSession = New-SFTPSession -ComputerName $ComputerName -Credential $Credential -AcceptKey

# lists directory files into variable
$FilePath = Get-SFTPChildItem -sessionID $SFTPSession.SessionID -path $SftpPath


foreach($item in (dir $LocalPath "*.txt")){   
    "Uploading $item..."   
    $uri = New-Object System.Uri($ComputerName+$SftpPath+$item.Name) 
    $webclient.UploadFile($uri, $item.FullName) 
 }

#Terminates the SFTP session on the server
Remove-SFTPSession -SessionId $SFTPSession.SessionID

Content-Key: 6606979029

Url: https://administrator.de/contentid/6606979029

Printed on: April 27, 2024 at 06:04 o'clock

Mitglied: 8030021182
8030021182 Dec 07, 2023 updated at 07:34:39 (UTC)
Goto Top
foreach($item in Get-ChildItem -LiteralPath $LocalPath -File -Filter *.txt){   
    "Uploading '$($item.Fullname)' ..."  
     Set-SFTPItem -sftpsession $sftpsession -Destination '/www' -Path $item.Fullname -Force  
}
https://github.com/darkoperator/Posh-SSH/blob/master/docs/Set-SFTPItem.m ...

Gruß Katrin
Member: RalphT
Solution RalphT Dec 07, 2023 at 08:09:48 (UTC)
Goto Top
Dieser Einzeiler ist schon mal ein Fortschritt.
Ich habe mal eben die folgende Zeile ausprobiert in Verbindung mit folgende Pfadangabe ausprobiert:

$FilePath = "C:\UPLOAD\*.txt"  
Set-SftpItem -SessionId ($ThisSession).SessionId -Path $FilePath -Destination $SftpPath -Force

In diesem Verzeichen liegen mehrere Textdateien. Er kopiert aber nur die erste Datei hoch. Wie kann man das ändern, sodass alle TXT-Dateien hochgeladen werden?
Mitglied: 8030021182
8030021182 Dec 07, 2023 updated at 08:13:30 (UTC)
Goto Top
Öhm den Part habe ich doch schon oben an dein Skript angepasst für alle Textdateien des Ordners ... 🤔
Member: RalphT
RalphT Dec 07, 2023 at 08:21:06 (UTC)
Goto Top
Ahhh, hatte Tomaten auf den Augen!

Perfekt, dat lüppt. Danke Dir!