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-ID: 6606979029

Url: https://administrator.de/forum/sftp-upload-per-posh-ssh-fehler-6606979029.html

Ausgedruckt am: 22.12.2024 um 19:12 Uhr

8030021182
8030021182 07.12.2023 aktualisiert um 08:34:39 Uhr
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
RalphT
Lösung RalphT 07.12.2023 um 09:09:48 Uhr
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?
8030021182
8030021182 07.12.2023 aktualisiert um 09:13:30 Uhr
Goto Top
Öhm den Part habe ich doch schon oben an dein Skript angepasst für alle Textdateien des Ordners ... 🤔
RalphT
RalphT 07.12.2023 um 09:21:06 Uhr
Goto Top
Ahhh, hatte Tomaten auf den Augen!

Perfekt, dat lüppt. Danke Dir!