本日のお題は前回に続き「ログ出力」です。
ログ出力とは言ってもログの出力方法ではなく、ログ出力されたエラー内容についてです。
ログ出力ができるようになってプログラムの悲鳴が聞こえても、どうしてあげればいいのかわからなければ助けようがありません。
というわけで今回はログの対処を学んでいきましょう。
エラータイプ | 説明 | 例 | 例の対処法 | 修正コード |
---|---|---|---|---|
ターミネーティングエラー | スクリプトの実行を即座に停止する重大なエラー | 存在しないファイルへのアクセス:Get-Content -Path “C:\nofile.txt” | Get-Contentの前にifとTest-Pathでファイルがあるか確認を入れよう また取得しようとしているファイルが無いときのelse文も追加するとわかりやすくなる | if(Test-Path “C:\nofile.txt”){ Get-Content処理 }else{ Write-Output “ファイルがありません。” } |
ノンターミネーティングエラー | エラーが発生してもスクリプトは続行される | 無効なパス指定:Get-ChildItem -Path “C:\InvalidPath” | これも上記と同様に対処 またはSet-LocationやGet-Location等を使用しパスを確実にして取得する | Set-Location ./InvalidPath $InvalidPath = Get-Location Get-ChildItem -Path $InvalidPath |
パースエラー | 構文ミスなどでスクリプトが解釈できない | 引用符の閉じ忘れ:Write-Host “Hello World | WindowsPowerShellISEなど専用のエディターを用いることでエラー状況に気づきやすくする | 不適切なコード箇所は赤波線等視覚でわかりやすい |
実行時エラー | 実行中に発生する予期しないエラー | ゼロ除算:$result = 10 / 0 | 例で言うと、割る数字に対してデータの値のバリデーションをしっかりとりましょう | $div = 0 if($div -ne 0){ $result = 10 / $div } |
ロジックエラー | 意図した動作にならないが、構文的には正しい | 条件分岐の誤り:if ($age -lt 18) { Write-Host “成人です。” }($ageが20でも表示されない) | エディタでif文の中身がTRUEまたはFALSEを正しく出力しているかを確認しましょう | -le : less than(<)のこと if($age -gt 18){ Write-Host “成人です。” } |
権限不足によるエラー | 管理者権限が必要な操作で発生 | Set-ExecutionPolicy RemoteSigned を通常ユーザーで実行 | 権限問題は会社での業務でよく起こります。ファイルの権限を確かめましょう | ファイルを一度利用者の 環境で保存し直すと治ることもあります |
実行ポリシー制限 | スクリプトの実行が許可されていない | スクリプトの実行が無効になっています というメッセージ | こちらも上記と同様です。 | ファイルを一度利用者の 環境で保存し直すと治ることもあります |
コマンドのタイプミス | コマンドレット名の誤り | Get-Itme(正しくは Get-Item) | 綴り間違いはよくあります。焦らずタイピングしましょう。 |
いかがだったでしょうか。
まだ当ブログで紹介していないプログラムもあるので、何を言っているかよくわからない人はまた後で見返すことで理解できることも多々あります。
数回のエラーでプログラムをあきらめずに、トライ&エラーで楽しくプログラミングしましょう!
コメント