1

我有一个 powershell 脚本,几个月来一直有问题。该脚本计算 tif 文件文件夹中的页数,然后将该文件夹分解为子文件夹,每个子文件夹大约 50 页。在我的测试环境中(设置与生产相同)它通过了超过 1000 个 tif 文件的测试库,没有出现任何错误。在我们将它提升到生产环境后,我们开始遇到脚本崩溃,其中以下代码将创建一个没有扩展名的文件而不是创建一个文件夹,然后将不再能够处理文件。

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

在其他几个地方我使用 New-Item <> -ItemType Directory 命令,这些命令在 99% 的时间里都有效,但有时它们也会创建一个文件而不是文件夹。

该脚本按计划每五分钟运行一次,因此每天大约有 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 回答
0

因此,经过大量系统故障排除和错误搜索后,我发现是什么导致了这个问题。我碰巧在正确的时间查看了正确的文件并看到了发生的事情。还有另一个脚本在我们将文件移动到的目录上运行,它们将我们复制的文件馈送到另一个要处理的软件产品中。发生的事情是第二个脚本在 Powershell 将文件移动到其中时删除了该文件夹,这由于某种原因使 Powershell 创建了垃圾文件(Leaf)。通过将我的东西处理到另一个文件中来解决这个问题,然后将其批量移到第二个文件夹中。

谢谢大家的回答!

于 2013-07-18T14:19:56.933 回答
0

不确定我的理解是否正确:脚本在客户端上运行。客户端运行脚本并在服务器上执行所有文件/文件夹处理(因为我看到您刚刚提到“服务器名称”)。因此,尽管您有多个(或许多)客户端运行此脚本,但文件/文件夹处理的位置仍位于一台服务器上。

如果答案是“是”,那么您可能想chkdsk [hard drive letter] /f在有问题的服务器上尝试。由于它是一台服务器,因此请确保您拥有“chekdsk”所在卷的数据的良好备份副本,尽管chkdsk /f它是安全的 - 它会为您检查并修复磁盘上的不一致。

这个答案基于这篇文章:http ://answers.yahoo.com/question/index?qid=20070519001528AApeRx6

于 2013-07-10T19:35:09.930 回答