Загрузите самый последний файл на FTP-сервер с помощью PowerShell ISE или WinSCP

Я хочу загрузить последний XML-файл из моей локальной папки на FTP-сервер с помощью сценария автоматизации PowerShell. Я поискал в Интернете и обнаружил, что этого можно добиться с помощью WinSCP в PowerShell. У кого-нибудь есть информация, как добиться этого с помощью PowerShell ISE или WinSCP?

введите описание изображения здесь

Я хочу загрузить ABCDEF.XML с отметкой времени в 22:00 из моей локальной папки на FTP-сервер.


person saha.jan    schedule 21.03.2018    source источник


Ответы (1)


Вот пример WinSCP для вашей конкретной задачи: Загрузить самый последний файл в PowerShell.

Единственная модификация, которую вам нужно сделать, это то, что сценарий предназначен для SFTP, а вам нужен FTP. Хотя изменение тривиально и довольно очевидно:

try
{
    # Load WinSCP .NET assembly
    Add-Type -Path "WinSCPnet.dll"
 
    # Setup session options
    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
        Protocol = [WinSCP.Protocol]::Ftp
        HostName = "example.com"
        UserName = "user"
        Password = "mypassword"
    }
 
    $session = New-Object WinSCP.Session
 
    try
    {
        # Connect
        $session.Open($sessionOptions)
 
        $localPath = "c:\toupload"
        $remotePath = "/home/user"
 
        # Select the most recent file.
        # The !$_.PsIsContainer test excludes subdirectories.
        # With PowerShell 3.0, you can replace this with Get-ChildItem -File switch 
        $latest =
            Get-ChildItem -Path $localPath |
            Where-Object {!$_.PsIsContainer} |
            Sort-Object LastWriteTime -Descending |
            Select-Object -First 1
 
        # Any file at all?
        if ($latest -eq $Null)
        {
            Write-Host "No file found"
            exit 1
        }
 
        # Upload the selected file
        $session.PutFiles(
            [WinSCP.RemotePath]::EscapeFileMask($latest.FullName),
            [WinSCP.RemotePath]::Combine($remotePath, "*")).Check()
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }
 
    exit 0
}
catch
{
    Write-Host "Error: $($_.Exception.Message)"
    exit 1
}

Если вы обнаружите что-то непонятное в коде, уточните его.


Хотя проще использовать простой сценарий WinSCP с его -latest переключателем из простого командного файла Windows. (или PowerShell, если хотите).

person Martin Prikryl    schedule 22.03.2018