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

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

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

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

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

Q&A

2回答

274閲覧

powershellでSFTP送信成功時はすり抜け、失敗時はエラーを出し、ログ上に出力したい

loser

総合スコア0

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

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

0グッド

0クリップ

投稿2024/09/09 07:46

実現したいこと

powershellでSFTP送信成功時はすり抜け、失敗時はエラーを出し、ログ上に出力したいのですが、
if ($? -ne ”true“){
としても全てすり抜けてしまいます。
送信先はlinuxです。

発生している問題・分からないこと

こちら最低限送信できなかった場合のエラーを拾う方法などはございますでしょうか?

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

$? -ne ”true“としてもすり抜けてしまう

補足

特になし

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

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

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

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

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

melian

2024/09/09 08:55 編集

about_Automatic_Variables - $? https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_automatic_variables?view=powershell-7.4#section-1 > ネイティブコマンド(実行可能ファイル)の場合、$? は $LASTEXITCODE が 0 の場合は True に設定され、$LASTEXITCODE が他の値である場合は False に設定されます。 ところで、if ($? -ne "true") の "true" は文字列なので、論理値としては True になります。"false" も同様で、空文字列("")以外は全て True になります。 PS> [bool]"true" True PS> [bool]"false" True PS> [bool]"" False if ($? -ne "true") でも結果は同じなので問題はないのですが、if ($? -ne $true) としておく方がよいかと思います。(もしくは if ( ! $? ) ) > SFTP送信成功時はすり抜け、失敗時はエラーを出し、ログ上に出力したいのですが、... 全てすり抜けてしまいます。 となれば、SFTP送信に利用しているコマンドでは、送信が成功しても失敗しても $LASTEXITCODE が 0 になっているのではないかと思います。
otn

2024/09/09 13:14

sftpはどのように使っていますか? sftp -b コマンド列を書いたファイル user@servername ですか?
guest

回答2

0

sftpはどのように使っていますか?

回答として書いておくと、

ケース1:
sftp -b コマンド列を書いたファイル user@servernameとして起動した:
コマンドでエラーがあるとそこで中断して、$?False。最後までエラーがないとTrue

ケース2:
コマンド列を出力するコード | sftp user@servernameとして起動して標準入力からコマンドを読む:
コマンドのエラーがあっても最後まで実行して、$?は常にTrue
(サーバーにログインできなかった場合は、もちろんFalseですが)

との違いではないかと思います。
パイプを使いたい場合で-bを使うには、
コマンド列を出力するコード | sftp -b - user@servername
と標準入力を意味する-をファイル名の位置に書くと、ケース1のパターンになります。

sftpのプログラムの作りで動作が違う可能性もありますが、少なくともWindows標準のsftp.exeや、Linuxのsftpはこの通りです。おそらくどのsftpでも同じ。

あと、質問ポイントではないですが、「失敗ならば」のifは、if ( -not $? ){でしょうね。

投稿2024/09/10 14:30

otn

総合スコア85976

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

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

0

pwershell であれば、実行したコマンドの終了コードは

$LASTEXITCODE

で取得できると思いますよ。

投稿2024/09/09 07:57

TakaiY

総合スコア13902

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問