使用 PowerShell 从 SFTP 服务器下载文件
Download files from SFTP server using PowerShell
我需要使用 PowerShell 脚本将文件从 SFTP 服务器下载到本地计算机。
将用于下载的 API/library 需要能够监控传输结果、记录传输以及 archive/move 下载的文件。
提前致谢。
PowerShell 或 .NET 框架不支持 SFTP。所以你必须使用外部 SFTP 库。
一种可能性(您在问题中标记了自己)是 WinSCP .NET assembly. There's an article on using WinSCP from PowerShell。
还有一个code example in PowerShell for SFTP download:
try
{
# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Sftp
HostName = "example.com"
UserName = "user"
Password = "mypassword"
SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
}
$session = New-Object WinSCP.Session
try
{
# Connect
$session.Open($sessionOptions)
# Download files
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
$remotePath = "/home/user/*";
$localPath = "d:\download\*";
$transferResult =
$session.GetFiles($remotePath, $localPath, $False, $transferOptions)
# Throw on any error
$transferResult.Check()
# Print results
foreach ($transfer in $transferResult.Transfers)
{
Write-Host "Download of $($transfer.FileName) succeeded"
}
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
exit 0
}
catch [Exception]
{
Write-Host "Error: $($_.Exception.Message)"
exit 1
}
WinSCP GUI 甚至可以 generate a PowerShell SFTP download code,如上面的那样,用于您的特定会话设置和传输选项:
- 使用 WinSCP GUI 登录您的服务器;
- Select 远程文件面板中下载的文件;
- 导航到本地文件面板中的目标目录;
- 调用下载命令;
- 在 Transfer options dialog 上,转到 传输设置 > 生成代码;
- 在“生成传输代码”对话框中,select .NET assembly code tab;
选择 PowerShell 语言。
(我是WinSCP的作者)
我需要使用 PowerShell 脚本将文件从 SFTP 服务器下载到本地计算机。
将用于下载的 API/library 需要能够监控传输结果、记录传输以及 archive/move 下载的文件。
提前致谢。
PowerShell 或 .NET 框架不支持 SFTP。所以你必须使用外部 SFTP 库。
一种可能性(您在问题中标记了自己)是 WinSCP .NET assembly. There's an article on using WinSCP from PowerShell。
还有一个code example in PowerShell for SFTP download:
try
{
# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Sftp
HostName = "example.com"
UserName = "user"
Password = "mypassword"
SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
}
$session = New-Object WinSCP.Session
try
{
# Connect
$session.Open($sessionOptions)
# Download files
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
$remotePath = "/home/user/*";
$localPath = "d:\download\*";
$transferResult =
$session.GetFiles($remotePath, $localPath, $False, $transferOptions)
# Throw on any error
$transferResult.Check()
# Print results
foreach ($transfer in $transferResult.Transfers)
{
Write-Host "Download of $($transfer.FileName) succeeded"
}
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
exit 0
}
catch [Exception]
{
Write-Host "Error: $($_.Exception.Message)"
exit 1
}
WinSCP GUI 甚至可以 generate a PowerShell SFTP download code,如上面的那样,用于您的特定会话设置和传输选项:
- 使用 WinSCP GUI 登录您的服务器;
- Select 远程文件面板中下载的文件;
- 导航到本地文件面板中的目标目录;
- 调用下载命令;
- 在 Transfer options dialog 上,转到 传输设置 > 生成代码;
- 在“生成传输代码”对话框中,select .NET assembly code tab; 选择 PowerShell 语言。
(我是WinSCP的作者)