one Laden Sie die Datei über PowerShell auf SFTP hoch



powershell ftp upload multiple files (3)

Wir wurden gebeten, einen automatisierten Upload von einem unserer Server auf eine SFTP-Site einzurichten. Es wird jeden Montagmorgen eine Datei geben, die aus einer Datenbank in einen Filer exportiert wird, und sie möchte, dass die Datei am Dienstag auf SFTP hochgeladen wird. Die aktuelle Authentifizierungsmethode, die wir verwenden, ist Benutzername und Passwort (ich glaube, es gab auch eine Option, eine Schlüsseldatei zu haben, aber die Option Benutzername / Passwort wurde gewählt).

Ich stelle mir das so vor, dass ein Skript auf einem Server sitzt, der vom Windows Task Scheduler ausgelöst wird, um zu einer bestimmten Zeit (Dienstag) zu starten, die betreffende Datei in den SFTP zu laden und dann in einen anderer Speicherort für Sicherungszwecke.

Beispielsweise:

  • Lokales Verzeichnis: C:\FileDump

  • SFTP-Verzeichnis: /Outbox/

  • Backup-Verzeichnis: C:\Backup

Ich habe zu diesem Zeitpunkt einige Dinge ausprobiert, WinSCP ist einer von ihnen und SFTP PowerShell Snap-In, aber nichts hat für mich bisher funktioniert.

Dies wird auf Windows Server 2012 R2 ausgeführt.
Wenn ich Get-Host meine Konsolen-Host-Version 4.0.

Vielen Dank.


Answer #1

Derzeit gibt es keine integrierte PowerShell-Methode für den SFTP-Teil. Sie müssen etwas wie psftp.exe oder ein PowerShell-Modul wie Posh-SSH verwenden.

Hier ein Beispiel mit Posh-SSH :

# Set the credentials
$Password = ConvertTo-SecureString 'Password1' -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ('root', $Password)

# Set local file path, SFTP path, and the backup location path which I assume is an SMB path
$FilePath = "C:\FileDump\test.txt"
$SftpPath = '/Outbox'
$SmbPath = '\\filer01\Backup'

# Set the IP of the SFTP server
$SftpIp = '10.209.26.105'

# Load the Posh-SSH module
Import-Module C:\Temp\Posh-SSH

# Establish the SFTP connection
New-SFTPSession -ComputerName $SftpIp -Credential $Credential

# Upload the file to the SFTP path
Set-SFTPFile -SessionId 0 -LocalFile $FilePath -RemotePath $SftpPath

# Disconnect SFTP session
(Get-SFTPSession -SessionId 0).Disconnect()

# Copy the file to the SMB location
Copy-Item -Path $FilePath -Destination $SmbPath

Einige zusätzliche Hinweise:

  • Sie müssen das Posh-SSH-Modul herunterladen, das Sie in Ihrem Benutzermodulverzeichnis installieren können (z. B. C: \ Benutzer \ jon_dechiro \ Documents \ WindowsPowerShell \ Modules) und einfach mit dem Namen laden oder irgendwo hinstellen und wie ich laden habe im obigen Code.
  • Wenn die Anmeldeinformationen im Skript nicht akzeptabel sind, müssen Sie eine Anmeldeinformationsdatei verwenden. Wenn Sie Hilfe benötigen, kann ich mit einigen Details aktualisieren oder Sie auf einige Links verweisen.
  • Ändern Sie die Pfade, IPs usw. nach Bedarf.

Das sollte dir einen guten Startpunkt geben.


Answer #2

Mit PuTTY pscp.exe (die ich in einem Verzeichnis $env:path ):

pscp -sftp -pw passwd c:\filedump\* [email protected]:/Outbox/
mv c:\filedump\* c:\backup\*

Answer #3

Sie haben uns nicht gesagt, welches Problem Sie mit dem WinSCP haben, daher kann ich wirklich nur wiederholen, was in der WinSCP-Dokumentation steht.

  • Laden Sie WinSCP .NET Assembly herunter .
    Das neueste Paket ist ab sofort WinSCP-5.11.3-Automation.zip ;
  • Entpacken Sie das .zip Archiv entlang Ihres Skripts.
  • Verwenden Sie einen solchen Code (basierend auf dem offiziellen PowerShell-Upload-Beispiel ):

    # Load WinSCP .NET assembly
    Add-Type -Path "WinSCPnet.dll"
    
    # Setup session options
    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
        Protocol = [WinSCP.Protocol]::Sftp
        HostName = "example.com"
        UserName = "user"
        Password = "mypassword"
        SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
    }
    
    $session = New-Object WinSCP.Session
    
    try
    {
        # Connect
        $session.Open($sessionOptions)
    
        # Upload
        $session.PutFiles("C:\FileDump\export.txt", "/Outbox/").Check()
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }

Sie können WinSCP das PowerShell-Skript für den Upload für Sie generieren lassen:

  • Melden Sie sich mit der WinSCP GUI auf Ihrem Server an.
  • Navigieren Sie zum Zielverzeichnis im Remote-Dateibereich.
  • Wählen Sie die Datei für den Upload im lokalen Dateibereich aus.
  • Rufen Sie den Upload- Befehl auf.
  • Wechseln Sie im Dialogfeld Übertragungsoptionen zu Übertragungseinstellungen> Code generieren .
  • Wählen Sie im Dialogfeld Übertragungscode generieren die Registerkarte .NET-Assembly-Code aus .
  • Wählen Sie eine PowerShell- Sprache.

Sie erhalten einen Code wie oben, in dem alle Sitzungs- und Übertragungseinstellungen eingetragen sind.

(Ich bin der Autor von WinSCP)





sftp