Monday, October 3, 2016 5:00AM to 11:00AM (UTC) Schedouled down time to change site domain

スクリプト機能

このページでは、WinSCPのスクリプト/自動化機能について説明します。

WinSCPではGUIを利用した操作に加え、コマンドラインやスクリプトを使って処理を実行することが可能です。これらを利用することで、単純な処理を素早く実行したり、定型処理を自動実行させることができます。

スクリプト機能を使う

WinSCPでスクリプトなどを利用した自動処理を行うには、「/script」オプション付きでWinSCPを実行します。また、引数としてコマンドを与えて実行させるには「/command」オプションを使用します。WinSCPのコマンドラインオプションについては、コマンドラインオプションページを参照してください。

なお、デフォルトでは自動処理中でも通常の場合と同じようにGUIで進捗や確認が表示されます(GUIモード)。「batch on」コマンドでバッチモードに切り替えることで、これらのGUIによる表示を無効にすることができます。また、バッチモードでは「option confirm off」コマンドで操作時に行われる確認を無効にしておくと良いでしょう。

なお、WinSCPでは複数のセッションを同時に開くことが可能です。また、SSHによるサーバーへの初回接続時はホスト鍵の確認が必要です。さらに、FTPSで信頼できない証明書を使用しているサーバーに接続する場合は、証明書の確認が必要です。

リターンコード

WinSCPはスクリプト処理が正常終了した場合、通常は終了コードとして「0」を返します。もしエラーやユーザーによる処理停止などが発生した場合は、終了コード「1」を返します。また、処理内容を詳しく確認したい場合はXML形式でのログ機能が有用でしょう。

コマンド

WinSCPでは次のコマンドが実装されています。

コマンド説明
call任意のリモートシェルコマンドを実行
cdリモートのカレントディレクトリを変更
chmodリモートファイルのパーミッションを変更
closeセッションを閉じる
exitすべてのセッションを閉じてWinSCPを終了
getリモートディレクトリから指定したファイルをダウンロード
helpヘルプを表示
keepuptodateローカルディレクトリでの変更をリモートディレクトリに反映させる
lcdローカルのカレントディレクトリを変更
llsローカルディレクトリのファイル一覧を表示
lnリモートディレクトリでリンクを作成
lpwdローカルのカレントディレクトリ名を表示
lsリモートディレクトリのファイル一覧を表示
mkdirリモートディレクトリを作成
mvリモートファイルを移動/ファイル名を変更
openサーバーに接続
optionオプション設定値を設定/表示
putローカルディレクトリからリモートディレクトリにファイルをアップロード
pwdリモートのカレントディレクトリ名を表示
rmリモートファイルを削除
rmdirリモートディレクトリを削除
sessionセッション一覧を表示/アクティブなセッションを選択
synchronizeリモートディレクトリをローカルディレクトリと同期

ホスト鍵および証明書を確認するスクリプト

SSHサーバーへの初回接続時には、ホスト鍵の確認が必要です。この処理は「/hostkey」オプションで自動化できます。

また、信頼できないFTPSサーバーへの接続時にも同様に認証が必要です。この処理を自動化するには、「open」コマンドの「certificate」オプションを使用します。

異なるアカウント間で共通の設定を利用する

たとえばWindows Schedulerなどを使用して自動的に処理を実行させる場合など、普段WinSCP利用しているユーザーとは異なるユーザーでスクリプトを実行したい場合があります。通常WinSCPの設定はレジストリに記録され、ユーザーごとに独立しています。もし他のユーザーの設定を利用したい場合は、設定をINIファイルに書き出しておき、起動時に「/inifile」オプションでそのファイルを指定することで対応できます。

実行例

下記は次のような処理を行う場合の例です。

  • 「example.com」に「user」というアカウントで接続し、ファイルをダウンロードして接続を閉じる
  • 続けて 同じサーバーに「user2」というアカウントで接続し、ダウンロードしたファイルをアップロードする
# バッチモードに設定し、確認/問い合わせを無効にする
option batch on
# ファイル上書きの確認などを無効にする
option confirm off
# サーバーに接続
open user@example.com
# なおパスワードを指定して接続するには次のようにする
# open user:password@example.com

# リモートディレクトリを変更
cd /home/user
# バイナリモードに変更
option transfer binary
# ファイルをd:\にダウンロード
get examplefile.txt d:\
# 切断
close

# 異なるユーザーでサーバーに接続
open user2@example.com
# リモートディレクトリを変更
cd /home/user2
# ファイルをアップロード
put d:\examplefile.txt 
# 切断
close
# 終了
exit

このスクリプトを「example.txt」に保存し、次のようにして実行します。

winscp.exe /console /script=example.txt

また、「/command」オプションを使用してコマンドラインで同様の処理を指定するには次のようにします。

winscp.exe /console /command "option batch on" "open user@example.com" "get examplefile.txt d:\" "exit"

「open」コマンドを利用する代わりに、コマンドラインで接続先サーバーを指定することもできます。この場合、まずサーバーへの接続が行われてからスクリプトが実行されます。

winscp.exe /console /script=example.txt user@example.com