使用PowerShell脚本上传整个文件夹到FTP

7

我正在编写一个PowerShell脚本,将整个文件夹的内容上传到FTP位置。我对PowerShell非常新,并且只有一两个小时的经验。我可以成功上传一个文件,但找不到一个好的解决方案来处理文件夹中的所有文件。我假设使用foreach循环,但也许还有更好的选择?

$source = "c:\test"
$destination = "ftp://localhost:21/New Directory/"
$username = "test"
$password = "test"
# $cred = Get-Credential
$wc = New-Object System.Net.WebClient
$wc.Credentials = New-Object System.Net.NetworkCredential($username, $password)

$files = get-childitem $source -recurse -force
foreach ($file in $files)
{
    $localfile = $file.fullname
    # ??????????
}
$wc.UploadFile($destination, $source)
$wc.Dispose()
1个回答

17

循环(或更好的是递归)是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/eng/docs/library_session_putfiles

(我是WinSCP的作者)


1
非常感谢,这太棒了。我已经下载了WinSCP并会去看一下它。 - HMan06

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接