try { Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll" $sessionOptions = New-Object WinSCP.SessionOptions -Property @{ Protocol = [WinSCP.Protocol]::Sftp HostName = "xxx.xxx.xxx.xxx" UserName = "user" Password = "password" SshHostKeyFingerprint = "ssh-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } $session = New-Object WinSCP.Session try { ########################## Connect ########################## $session.Open($sessionOptions) $localPath = "C:\local_folder" $remotePath = "/remote_folder/" ########################## Select the most recent file. ########################## $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() ########################## Count the files ########################## $files = $session.EnumerateRemoteFiles( $remotePath, $null, [WinSCP.EnumerationOptions]::None).count #$x= $files.length if ($x -ge 10) { $directoryInfo = $session.ListDirectory($RemotePath) ########################## Select the oldest remote file ########################## $latest1= $directoryInfo.Files | Where-Object { -Not $_.IsDirectory } | Sort-Object LastWriteTime -Descending | Select-Object -last 1 ########################## Delete the selected file ########################## $session.RemoveFiles($latest1.FullName).Check() } else { Write-Host "No files matching $files found" } } finally { $session.Dispose() } #exit 0 } catch { Write-Host "Error: $($_.Exception.Message)" # exit 1 }