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

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

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

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

Q&A

解決済

1回答

2836閲覧

PowerShellで例外メッセージをif文の条件式にして分岐処理をしたい

2017yamaguchi

総合スコア14

PowerShell

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

0グッド

0クリップ

投稿2022/08/24 10:29

編集2022/08/24 11:42

前提

PowerShellを使ったシェルスクリプトの作成を実施しています。
例外処理を行うためにtry~catch文を用いています。
ここで、catch文の$_.Exception.Messageを更にif文を使って分岐処理を行いたいです。

実現したいこと

  • Powershellの例外をキャッチした中で、例外発生時に発生するメッセージ $_.Exception.Messageを更にif文を使って分岐処理をしたい。

発生している問題・エラーメッセージ

$_.Exception.Messageユーザー名またはパスワードが正しくありません。を表している時、if文の条件式でtrueと判定できていない。

if($eMsg -eq "ユーザー名またはパスワードが正しくありません。") { #ここの処理が実行できていない(今回の問題点) #今回個の処理を実行させるようにしたい。 }

全体のコード

PowerShell

1try{ 2 #処理 3} 4catch [System.Runtime.InteropServices.COMException]{ 5 $eMsg = $_.Exception.Message 6 7 if($eMsg -eq "ユーザー名またはパスワードが正しくありません。") 8 { 9 #処理 10 } 11 else{ 12 #処理 13 } 14} 15catch [Exception]{ 16 #処理 17}

試したこと

PowerShellから例外のエラーメッセージを$eMsgを格納する行にブレークポイントを設定して、$eMsgを格納する行まで実行させた。
その後、コンソール画面から$eMsgを以下のように確認したが、ユーザー名またはパスワードが正しくありません。と等しい結果となっていなかった。

>$eMsg ユーザー名またはパスワードが正しくありません。 >$eMsg -eq "ユーザー名またはパスワードが正しくありません。" False

$eMsgの型を調べてもString型なので、変数の型が間違っていないことを確認した。

補足情報(FW/ツールのバージョンなど)

今回試したPowerShellのバージョンは以下の通りです。

$PSVersionTable

を実行すると以下の内容が出力された。

Name Value ---- ----- PSVersion 5.1.19041.1682 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.19041.1682 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1

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

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

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

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

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

Zuishin

2022/08/24 10:44

最初に半角空白があるように見えますが。
2017yamaguchi

2022/08/24 11:37

質問のページに誤植があったので編集しました。 ```if($eMsg -eq "ユーザー名またはパスワードが正しくありません。")``` でif文内に半角空白入っていましたが、変数$eMsg自体には半角空白が入っていませんでした。
Zuishin

2022/08/24 11:55

そうじゃなくて、出力の最初に半角空白が入っています。 > >$eMsg > ユーザー名またはパスワードが正しくありません。 「ユーザー名」の前です。 コンソールではなくファイルに出力すればより正確なことがわかるんじゃないかと思います。
guest

回答1

0

自己解決

Zuishin様より$eMsg内に半角空白が含まれているとのことでしたので、trimを使用してif($eMsg.Trim() -eq "ユーザー名またはパスワードが正しくありません。")とすると想定していた判定をすることができました。

投稿2022/08/24 16:34

2017yamaguchi

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問