サーバーの1つからSFTPサイトへの自動アップロードを設定するように求められました。毎週月曜日の朝にデータベースからファイラーにエクスポートされるファイルがあり、火曜日にファイルをSFTPにアップロードする必要があります。現在使用している認証方法はユーザー名とパスワードです(キーファイルもあるオプションがあると思いますが、ユーザー名/パスワードオプションが選択されました)。
これを想定している方法は、特定の時間(火曜日)に実行するWindowsタスクスケジューラによってトリガーされるサーバー上にスクリプトを配置し、問題のファイルを取得してSFTPにアップロードしてから、バックアップ用の別の場所。
例えば:
ローカルディレクトリ:C:\FileDump
SFTPディレクトリ:/Outbox/
バックアップディレクトリ:C:\Backup
この時点で、WinSCPがそれらの1つであるだけでなく、 SFTP PowerShellスナップイン で試したことはほとんどありませんでしたが、これまでのところ何も機能していません。
これは、Windows Server 2012R2で実行されます。Get-Host
を実行すると、コンソールのホストバージョンは4.0です。
ありがとう。
現在、SFTPの部分を実行するための組み込みのPowerShellメソッドはありません。 psftp.exeのようなものまたはPosh-SSHのようなPowerShellモジュールを使用する必要があります。
Posh-SSH を使用した例を次に示します。
# Set the credentials
$Password = ConvertTo-SecureString 'Password1' -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ('root', $Password)
# Set local file path, SFTP path, and the backup location path which I assume is an SMB path
$FilePath = "C:\FileDump\test.txt"
$SftpPath = '/Outbox'
$SmbPath = '\\filer01\Backup'
# Set the IP of the SFTP server
$SftpIp = '10.209.26.105'
# Load the Posh-SSH module
Import-Module C:\Temp\Posh-SSH
# Establish the SFTP connection
$ThisSession = New-SFTPSession -ComputerName $SftpIp -Credential $Credential
# Upload the file to the SFTP path
Set-SFTPFile -SessionId ($ThisSession).SessionId -LocalFile $FilePath -RemotePath $SftpPath
#Disconnect all SFTP Sessions
Get-SFTPSession | % { Remove-SFTPSession -SessionId ($_.SessionId) }
# Copy the file to the SMB location
Copy-Item -Path $FilePath -Destination $SmbPath
いくつかの追加のメモ:
それはあなたにまともな出発点を与える必要があります。
WinSCPに関してどのような問題があるのか教えてくれなかったので、WinSCPのドキュメントにあるものだけを繰り返すことができます。
WinSCP-5.15.4-Automation.Zip
です。.Zip
アーカイブ。次のようなコードを使用します(公式の PowerShellのアップロード例 に基づく):
# 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)
# Upload
$session.PutFiles("C:\FileDump\export.txt", "/Outbox/").Check()
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
WinSCPにアップロード用のPowerShellスクリプトを生成させることができます:
すべてのセッションと転送設定が入力された上記のようなコードを取得します。
(私はWinSCPの著者です)
PuTTYのpscp.exe を使用(これは$env:path
ディレクトリにあります):
pscp -sftp -pw passwd c:\filedump\* user@Host:/Outbox/
mv c:\filedump\* c:\backup\*