如何在 PowerShell 中通过 FTP 上传文件

  1. 使用 System.Net.WebClient 对象通过 PowerShell 上传文件到 FTP
  2. 使用 FtpWebRequest 对象通过 PowerShell 上传文件到 FTP
  3. 使用 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 对象的实例并将其赋值给变量 $WebClientNew-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/"