2016-08-02 45 views
11

私たちのサーバーのいずれかからSFTPサイトへの自動アップロードを設定するように求められました。毎週月曜日の朝、データベースからファイラーにエクスポートされたファイルがあり、ファイルは火曜日にSFTPにアップロードされます。私たちが使用している現在の認証方法はusernameとpasswordです(私はキーファイルも持っているがusername/passwordオプションが選択されていると思います)。PowerShellを使用してSFTPにファイルをアップロード

私はこれを想定していますが、Windowsタスクスケジューラが特定の時間(火曜日)に実行するサーバー上にスクリプトを置いて、問題のファイルを取得しSFTPにアップロードしてからバックアップのために別の場所に移動します。例えば

  • ローカルディレクトリ:C:\FileDump

  • SFTPディレクトリ:/Outbox/

  • バックアップディレクトリ:私はこれでいくつかのことを試してみましたC:\Backup

ポイントのWinSCPは、SFTP PowerShell Snap-Inと同様、そのうちの1つですが、これまでのところ私にとっては何も効果がありませんでした。

これはWindows Server 2012 R2で実行されます。
Get-Hostを実行すると、コンソールホストのバージョンが4.0になります。

ありがとうございました。

+0

私は、FTPスクリプトを持っていますそれはSystem.Net.WebRequestMethods + FTPを使用します。 私は http://www.thomasmaurer.ch/2010/11/powershell-ftp-upload-and-download/ を拠点として使用しました。もっと助けが必要な場合は、コードを公開してクリーンアップすることができます。 –

+0

@GlenBuktenica質問はFTP​​ではなくSFTPについてです。 –

答えて

13

現在、SFTP部分を実行するためのPowerShell組み込みメソッドはありません。 psftp.exeやPosh-SSHのようなPowerShellモジュールを使う必要があります。ここで

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 

いくつかの追加の注意事項:

  • あなたはあなたのユーザモジュールディレクトリにインストールすることができポッシュ-SSHのモジュールをダウンロードする必要があります(例えば、 C:\ Users \ jon_dechiro \ Documents \ WindowsPowerShell \ Modules)、名前を使ってロードするか、どこにでも置いて、上のコードのようにロードしてください。
  • スクリプト内の資格情報を使用できない場合は、資格情報ファイルを使用する必要があります。あなたがそれについての助けを必要とするならば、私はいくつかの細部を更新したり、いくつかのリンクを指し示すことができます。
  • 必要に応じてパス、IPなどを変更します。

これはまともな出発点です。

19

あなたはWinSCPのでなければならないの特にどのような問題を教えていなかったので、私は実際にはWinSCPのドキュメントに何があるか繰り返すことができます。

  • Download WinSCP .NET assembly
    最新のパッケージは現在WinSCP-5.13-Automation.zipです。
  • Extract.zipあなたのスクリプトに沿ったアーカイブ。
  • (公式PowerShell upload exampleに基づいて)このようなコード使用します。あなたはWinSCPのは、あなたのためのアップロードのためのPowerShellスクリプトを生成することができ

    # 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() 
    } 
    

を:

  • WinSCP GUIを使用してサーバーにログインします。
  • リモートファイルパネルのターゲットディレクトリに移動します。
  • アップロードするファイルをローカルファイルパネルで選択します。
  • アップロードコマンドを呼び出します。
  • Transfer options dialogには、に移動します。転送設定>コードを生成;
  • 転送コードの生成ダイアログで、.NET assembly code tabを選択します。
  • PowerShellを選択してください。

あなたには満たされたすべてのセッションおよび転送設定で上記のようなコードを取得します。

Generate transfer code dialog

(私はWinSCPのの著者です)

+1

私は昨日このことを理解しようとする問題を抱えていました。それからあなたの投稿を見つけました。これはたくさんの助けになりました! 私のテストはわずか数分で完了しました。それはうまくいくようです。それは、そこにあるすばらしい特徴です。 場合によっては、必要なものすべてが良い例です。 –

+0

うわー、素晴らしい情報、私はWinSCPがこの機能を持っていたことを実現していなかった!私はあなたのソフトウェアを愛しています:)問題の1つの問題は、WinSCPが接続プロセスのより多くのカスタマイズを可能にすることができればすばらしいことです。直接SCPは一度認証する必要があるため、PLINKを使用してシスコデバイスにSCPファイルを送信できますが、「En」を使わずに接続できず、DIRを取得することはできません。 WinSCPをセットアップする方法を理解してください。おそらく、XMLSを使用して接続プロセスをより制御することができますか? –

+0

WinSCPは私のSFTP問題のためのチャンピオンのように働いた – digitalslavery

関連する問題