質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

0回答

7686閲覧

powershellでWinSCPを用いたSFTP接続先でファイル存在判定

nene

総合スコア10

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2017/04/27 07:36

###前提
https://teratail.com/questions/73593
前回こちらで質問をさせて頂き、接続の判定や、その他エラーの判定処理を行うことができました。
※WinSCPでSFTP接続時のファイル転送結果を取得し処理判定に利用したいという質問でした。

ここからさらに、取得したエラーをエラーの内容によって処理を分けたいと考えております。

###現状
ファイル転送前に、ファイルが保存されているディレクトリから
転送用のディレクトリに移動させたいと考え以下のソースを追加しました。

$transferResult = $session.MoveFile("<移動元ディレクトリ/*.pdf>","移動先ディレクトリ/")

この時、移動元ディレクトリに該当のファイルが存在しない場合、
Exceptionを出力すると以下のように表示されます。

エラーWinSCP.SessionRemoteException: 移動元ディレクトリ/*.pdf not found. 場所 WinSCP.Session.MoveFile(String sourcePath, String targetPath) 場所 MoveFile(Object , Object[] ) 場所 System.Management.Automation.MethodInformation.Invoke(Object target, Object[] arguments) 場所 System.Management.Automation.DotNetAdapter.AuxiliaryMethodInvoke(Object target, Object[] arguments, MethodInformation methodInformation, Object[] originalArguments)

ですので、
「MoveFileを実行する前にファイルをがあるか存在を確認し、
あれば処理の実行へ、なければエラー判定用の変数にその旨をセットし処理判定に利用する。」
と考えました。

###試したこと
https://winscp.net/eng/docs/library_session#methods
ここのメソッド一覧にFileExistsというメソッドがあり、
これを使うことによりファイルの存在を確認できるのですが、

Parameters:string path Full path to remote file.1) … 1) Note that you cannot use wildcards here.

MoveFileと異なり、ワイルドカードの表現を指定できず、フルパスのみしか対応しておりませんでした。
ディレクトリ名は固定ですが、
その中の取得したいファイルは複数あるまた、ファイル名が固定ではない為、
フルパスの指定が難しいと判断しました。

###応急手段
エラーコードを取得したり、その他メソッドがないかなどいろいろと調べてみましたが、
めぼしいものが見当たらず、応急手段として以下のように対応しました。

$error_info = $_.Exception | Out-String -Stream if ($error_info.IndexOf("not found") -ne -1) { $result_code = 2 # ファイルが存在しないため処理を中止(エラー出力はしない) } else { $result_code = 99 # エラー処理 }

記載のとおり、Exceptionの文字列の中に"not found"があるかどうかを判定させております。

###質問したいこと
上記の方法ではかなり不安なため、
ファイルが存在するかどうかの判定方法が
他にないかご教授頂ければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問