如何在 PowerShell 中通过 FTP 上传文件
-
使用
System.Net.WebClient
对象通过 PowerShell 上传文件到 FTP -
使用
FtpWebRequest
对象通过 PowerShell 上传文件到 FTP - 使用 PowerShell 通过 FTP 上传多个文件

FTP(文件传输协议)是一种标准网络协议,用于在计算机网络上在客户端和服务器之间传输文件。FTP 服务器是促进互联网文件传输的常见解决方案。
我们可以将文件上传到 FTP 服务器,并从 FTP 服务器下载文件。PowerShell 是一个可以自动化 FTP 上传和下载任务的脚本工具。
本教程将教您如何使用 PowerShell 将文件上传到 FTP 服务器。
使用 System.Net.WebClient
对象通过 PowerShell 上传文件到 FTP
我们可以使用 System.Net.WebClient
对象将文件上传到 FTP 服务器。它从任何被 URI 标识的本地、内联网或互联网资源发送或接收数据。
首先,我们需要创建一个 System.Net.WebClient
对象的实例并将其赋值给变量 $WebClient
。New-Object
cmdlet 创建一个 .NET Framework 或 COM 对象实例。
$WebClient = New-Object System.Net.WebClient
现在,让我们指定一个文件和 FTP URI。使用服务器的有效用户名和密码。因此,用您的 FTP 详细信息替换 $FTP
中的值。
$File = "C:\New\car.png"
$FTP = "ftp://ftp_user:ftp_password@ftp_host/car.png"
然后创建一个 FtpWebRequest
对象并按如下所示进行配置。Credentials
属性用于指定连接到 FTP 服务器的凭据。
UseBinary
属性设置布尔值以指定文件传输的数据类型。True
表示要传输的数据为 binary
,而 false
表示要传输的数据为 text
。
此方法使用二进制传输模式在没有修改或转换的情况下传输文件。因此,源计算机上的同一文件将被上传到服务器。
$FTPRequest = [System.Net.FtpWebRequest]::Create("$remote_file")
$FTPRequest = [System.Net.FtpWebRequest]$FTPRequest
$FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
$FTPRequest.Credentials = New-Object System.Net.NetworkCredential($username, $password)
$FTPRequest.UseBinary = $true
$FTPRequest.UsePassive = $true
# Read the file for upload
$FileContent = gc -en byte $local_file
$FTPRequest.ContentLength = $FileContent.Length
# Get stream request by bytes
$run = $FTPRequest.GetRequestStream()
$run.Write($FileContent, 0, $FileContent.Length)
# Cleanup
$run.Close()
$run.Dispose()
当使用 FtpWebRequest
对象将文件上传到服务器时,我们必须将文件内容写入通过调用 GetRequestStream
方法获得的请求流。
在发送请求之前,我们必须写入流并关闭它。
使用 PowerShell 通过 FTP 上传多个文件
有时,我们可能需要将多个文件上传到 FTP 服务器。逐个上传文件将花费很多时间。
因此,我们创建了这个 PowerShell 脚本,以一次性将多个文件上传到 FTP 服务器。
首先,创建一个 System.Net.WebClient
对象并将其赋值给 $WebClient
变量。
$WebClient = New-Object System.Net.WebClient
指定所有要上传的文件所在的目录。
$Dir = "C:\New"
然后指定您的 FTP 服务器的 URI。
$FTP = "ftp://ftp_user:ftp_password@ftp_host/docs/"