2020-04-24


 テレビでも良く宣伝をしている某社が納品したPowerShellスクリプトで凄いbugを発見。
 どうも作成者はWindows外部コマンドとPowerShell cmdletとを等価に扱っている様で、cmdletのファイル削除エラーを$LASTEXITCODEで拾えると思ったらしい。他の個所のWindows外部コマンド.exe起動後エラー判定も、同一処理としている。

 ErrorActionPreferenceは設定されていないので、この処理でエラーが発生すると一般的にはContinueされて#エラー判定 以降に進むのだがエラーがキャッチされる事は無い。

 PowerShellではエラーをtry{} catch[exception]{}で判定する必要があるのだが、他のスクリプトにも一切出現していない事から見て、根本的な理解誤りの様だ。
 cmdletで実際にエラーを起こすのは難しい場面もあるが、テストを良く通過したなと思った。
  この会社の「お任せあれ」は怪しいな。

 なお、筆者ならファイルの属性変更して削除できなくしてわざとエラーを起こす等でテストします。
  

  Get-ChildItem $Logs -Recurse -include *.log | Where-object{((Get-Date) – $_.LastWriteTime).Days(後略)   
    #エラー判定
    if($LASTEXITCODE -ne 0)
    {
        "正常に終了しました。"

0 コメント:

自己紹介

自分の写真
東京都, Japan
憂鬱な凍死家です。こちらではmixiとは異なり固めの話題中心です。

Total Page View

Categories

Powered by Blogger.

Popular Posts

Blog Archive