標準のWindowsServer 2012機能を使用して、外部FTPS(またはSFTP)サーバーを安全に定期的にポーリングし、ファイルをローカルにコピー/移動することは可能ですか?
ポーリング/移動を行うためにスケジューラーを使用することを想像しますが、FTPS/SFTPをミックスに追加する機能はありますか?
私が遭遇した唯一のガイダンスは、サーバーをFTPSサーバーに変えることですが、OSのFTPSクライアントを利用する方法はありません。
ありがとう
WindowsにはFTPSもSFTPクライアントもありません(どのバージョンでも)。
組み込みのWindowsftp.exe
プレーンな暗号化されていないFTPのみをサポートします。さらに、ファイアウォールまたはNATの背後にあるサーバーに接続する場合、アクティブFTPモードのみをサポートするため、かなり役に立たなくなります。
サードパーティのクライアントを使用する必要があります。
たとえば、 WinSCP FTP/SFTP client の場合、次のようなバッチファイルを使用してFTPSサーバーをポーリングできます。
winscp.com /command ^
"open ftps://user:[email protected]/" ^
"get /path/file c:\path\" ^
"exit"
SFTPの場合も同様です。
winscp.com /command ^
"open sftp://user:[email protected]/ -hostkey=""ssh-rsa 2048 xxxxxxxxxxx...=""" ^
...
WinSCPを使用したスクリプト作成ガイド を参照してください。
そして、 Windowsスケジューラでスクリプトをスケジュールする 。
(私はWinSCPの作者です)
PowerShellスクリプトの.NETFrameworkの FtpWebRequest
クラスを使用することもできます。 FTPSをサポートします(SFTPはサポートしません)。ただし Microsoftは新しい開発には推奨していません 。とにかく、例については、 @ TessellatingHecklerによる回答 を参照してください。
PowerShellの.NetFrameworkの FTPWebRequest クラスを使用し、EnableSsl
プロパティを使用してFTPSを有効にすることで、標準のWindowsツールでそれを実行できるようです。
ここに例があります: https://stackoverflow.com/q/1279041/478656 これにはコードが含まれています(私はテストしていません):
# Create an FTPWebRequest object to handle the connection to the FTP server
$ftprequest = [System.Net.FtpWebRequest]::Create($sourceuri)
# Set the request's network credentials for an authenticated connection
$ftprequest.Credentials = New-Object System.Net.NetworkCredential($username,$password)
# Set FTPWebRequest method to ListDirectory
$ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::ListDirectory
$ftprequest.EnableSsl = $True
$ftprequest.UseBinary = $False
$ftprequest.UsePassive = $True
$ftprequest.KeepAlive = $False
$ftpresponse = $ftprequest.GetResponse()
Write-Out $ftpresponse.StatusCode
Write-Out $ftpresponse.StatusDescription
UseBinaryを$ trueに変更してから、 DownloadFile()メソッド を使用することを検討します。
次に、提案したようにタスクスケジューラからスクリプトを呼び出します。