PowerShellでFTP接続する共通モジュール「PsFtpTool」を作った。

WindowsでFTPを使うバッチを作る際にWinSCPを使うことが多かったのですが、WinSCPに依存しないようにしたくなったので、PowerShellでモジュールを作成しました。

作成の背景

もともと、ツールにFTP転送機能を実装する際は、機能が豊富で信頼性の高い「WinSCP」のライブラリ(WinSCP .NET Assemblyなど)を愛用していました。非常に便利で重宝していたのですが、環境ごとのバージョンの統一やバージョンアップに伴う仕様変更への懸念など「外部アプリを用いることの懸念」がありました。

そこで、「外部アプリのライブラリに依存している限り、この呪縛からは抜け出せない」と考え、設計を大きく変更。OSSとPowerShellを用いた実装へと舵を切ることにしました。

PsFtpTool の特徴

広告

Windows標準機能+OSSで動く

Windowsの任意フォルダに配置するだけで利用できます。

  • PowerShell 向けの ポータブル FTP ツール(フォルダコピーで配布、インストール不要)
  • Windows PowerShell 5.x 推奨、PowerShell 7.x でも動作
  • 関連するDDLも同梱。追加インストールは不要。

別アプリに依存しない仕様に変更

モジュール化することで 運用依存と 製品依存を大きく解消します。

  • 外部アプリのインストール・更新が不要
  • 外部 exe / COM 呼び出しに伴うパス・権限・実行ポリシーの問題の解消
  • 製品側の仕様変更でスクリプトや自動化が壊れる懸念の解消
  • 責任分界を明確化
広告

柔軟な運用を実現

設定ファイルとコマンドファイルの変更のみで対応できます。

  • 直すのは主に config + commands だけ(スクリプト本体は触らない)
  • config(JSON) で接続先・ジョブ登録、commands(.ftp 等) で処理を定義
  • 複数のプロトコルに対応:FTP、FTPS、SFTP(パスワード・鍵認証)
  • cd / get / put / move / rm / ls とワイルドカードに対応
  • ファイル0件の後続処理を制御
  • scripts 配列で複数コマンドファイルを順実行
  • 終了コードをで制御 :0=正常 / 1=0件 / -1=エラー
  • ログフォルダは 相対・絶対パスに対応
  • ログファイル名パターンの設定可能: 固定 / 日次 / 実行ごと(none / day / daytime

PsFtpTool の取得先

Githubで公開しています。