Цикл (или даже лучше рекурсия) - единственный способ сделать это изначально в PowerShell (или вообще .NET).
$source = "c:\source"
$destination = "ftp://username:password@example.com/destination"
$webclient = New-Object -TypeName System.Net.WebClient
$files = Get-ChildItem $source
foreach ($file in $files)
{
Write-Host "Uploading $file"
$webclient.UploadFile("$destination/$file", $file.FullName)
}
$webclient.Dispose()
Обратите внимание, что приведенный выше код не рекурсирует в подкаталоги .
Если вам требуется более простое решение, вам нужно использовать стороннюю библиотеку.
Например, с помощью сборки WinSCP .NET :
Add-Type -Path "WinSCPnet.dll"
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.ParseUrl("ftp://username:password@example.com/")
$session = New-Object WinSCP.Session
$session.Open($sessionOptions)
$session.PutFiles("c:\source\*", "/destination/").Check()
$session.Dispose()
Вышеупомянутый код перезаписывается.
См. https://winscp.net/rus/docs/library_session_putfiles
(я автор WinSCP)