1

数か月間問題を抱えていたpowershellスクリプトがあります。このスクリプトは、tif ファイルのフォルダー内のページ数をカウントし、フォルダーをそれぞれ約 50 ページのサブフォルダーに分割します。私のテスト環境 (本番環境と同じセットアップ) では、1000 以上の tif ファイルのテスト ベースを 1 つのエラーもなく実行しました。運用環境に昇格した後、次のコードがフォルダーを作成する代わりに拡張子のないファイルを作成し、ファイルを処理できなくなるというスクリプトのクラッシュが発生し始めました。

    if(!(Test-Path $processingDir))
      {
         New-Item $processingDir -ItemType directory
         $FolderCount = $FolderCount + 1
      }

他にも New-Item <> -ItemType Directory コマンドを使用する場所がいくつかありますが、それらはほぼ 99% の確率で機能しますが、フォルダーの代わりにファイルを作成することもあります。

このスクリプトはスケジュールに従って 5 分ごとに実行されるため、1 日に約 4 ~ 5 回外に出て、スクリプトが作成したファイルを削除しなければ、スクリプトが再び正常に完了することはありません。

また、ファイル名の角かっこに関する多くの問題があり、スクリプトからのエラー出力があると powershell エラーがスローされますが、それに対する既知の修正はないと理解しています。理想的には、このスクリプトを別の扱いにくい言語で再プログラムしたいのですが、時間の帯域幅がありません。

すべてのシステムに Powershell 2.0 をインストールしています。

4

3 に答える 3

1

以下を提案します。$processDir を引用符で囲むとエラーが修正されることを願っていますが、修正されない場合はデバッグ情報が役立つ場合があります。

if(!(Test-Path "$processingDir"))
  {
     New-Item "$processingDir" -ItemType directory
     if (!(Test-path "$processingDir") -or !(ls "$processingDir").PSIsContainer) {
       # Something went wrong. These error messages will go to the console screen,
       # but you could write them to a log file if you have one
       write-host ("!"*35) "  ERROR  " ("!"*35)
       write-host "ProcessingDir = '$processDir' (check for special chars in dir name)"
       write-host "Displaying ""DIR $processingDir"" (is there a file with this name?)"
       ls "$processDir"
       write-host ("!"*35) " END ERROR " ("!"*35)
     }
     $FolderCount = $FolderCount + 1
  }
于 2013-07-10T23:27:21.263 に答える