2017-03-28 4 views
-3

誰かが私を導くことができます/助けてください。ftpバッチファイルスクリプト

問題は、クライアントにログインしてレポートを表示/表示するためのWebサイトを持つUbuntuを実行している2台のサーバーがあります。もう1つは、レポートを作成/保存するWindowsサーバー2012 R2です。クライアントが見ることができるように、ウィンドウからUbuntuサーバーにファイルを移動する必要があります。データは現在7ギガバイトであり、年間3ギガバイトで成長しています。

ftpを使用して接続し、そのフォルダをローカルフォルダにコピーするには、バッチファイルが必要です。ただし、変更されたファイルのみをコピーする必要があります。

私は1つのバッチファイルしか書いていないので、変更されたファイルのみをコピーするftpバッチスクリプトを見つけることはできません。

あなたの私の最後の手段は、バッチスクリプト(その死の芸術)を知っているコーダーを見つけるようです。私はpowershellを一度も使ったことがないので、ここからどこで始めるべきかは分かりません。

私に教えてください。

おかげ ジョン

+0

私はrsyncはあなたの友人 – xeo

+0

かもしれないと思うhttp://serverfault.com/questions/287489/download-only-new-files-from-ftp-using-wget-curl –

+0

こんにちは、あなたに感謝アイデア。私は見ていたとsometihngを行うには両方が必要私はあなたが私がどのように取得する方法を知っているだろうとおなじではないです。 – Hoube78

答えて

0

これはPowerShellでそれを行うための方法だろう。 31日以上経過したファイルをアップロードしてアップロードします。

function FTP-Upload { 
    [CmdletBinding()] 
    param(
    [Parameter(Mandatory=$true)] 
    [string]$Source_File, 
    [Parameter(Mandatory=$true)] 
    [string]$Target_File, 
    [Parameter(Mandatory=$true)] 
    [string]$Target_Server, 
    [Parameter(Mandatory=$true)] 
    [string]$Target_Username, 
    [Parameter(Mandatory=$true)] 
    [string]$Target_Password 
    ) 

    $FTP = [System.Net.FTPWebRequest]::Create("ftp://$Target_Server/$Target_File") 
    $FTP = [System.Net.FTPWebRequest]$FTP 
    $FTP.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile 
    $FTP.Credentials = New-Object System.Net.NetworkCredential($Target_Username,$Target_Password) 
    $FTP.UseBinary = $true 
    $FTP.UsePassive = $true 
    # read in the file to upload as a byte array 
    $content = [System.IO.File]::ReadAllBytes($Source_File) 
    $FTP.ContentLength = $content.Length 
    # get the request stream, and write the bytes into it 
    $rs = $FTP.GetRequestStream() 
    $rs.Write($content, 0, $content.Length) 
    # be sure to clean up after ourselves 
    $rs.Close() 
    $rs.Dispose() 
} 

$Upload_Server = "server.network.tld" 
$Upload_Location = "/data/" 
$Upload_Username = "ftpuser" 
$Upload_Password = "ftppassword" 

$Files_To_Upload = Get-ChildItem E:\Path\To\Files -Recurse | Where-Object {($_.CreationTime -le (Get-Date).AddDays(-31)) -and (!$_.PSIsContainer)} 

Foreach ($File in $Files_To_Upload) { 
    FTP-Upload -Source_File $File.FullName -Target_File ($Upload_Location + $File.Name) -Target_Server $Upload_Server -Target_Username $Upload_Username -Target_Password $Upload_Password 
} 

2

あなたはwinscpでのPowerShellでそれを行うことができます。 Exemple:

try 
{ 
# 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:xx:xx" 
} 

$session = New-Object WinSCP.Session 

try 
{ 
    # Connect 
    $session.Open($sessionOptions) 

    # Upload files 
    $transferOptions = New-Object WinSCP.TransferOptions 
    $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary 

    $transferResult = $session.PutFiles("d:\toupload\*", "/home/user/", $False, $transferOptions) 

    # Throw on any error 
    $transferResult.Check() 

    # Print results 
    foreach ($transfer in $transferResult.Transfers) 
    { 
     Write-Host ("Upload of {0} succeeded" -f $transfer.FileName) 
    } 
} 
finally 
{ 
    # Disconnect, clean up 
    $session.Dispose() 
} 


    exit 0 
} 
catch [Exception] 
{ 
    Write-Host ("Error: {0}" -f $_.Exception.Message) 
    exit 1 
}