New-Item在大约10%的时间内创建文件而不是目录

时间:2013-07-10 18:37:02

标签: powershell

我有一个powershell脚本,我已经遇到了几个月的问题。该脚本计算tif文件的文件夹中的页数,然后将该文件夹分成每个约50页的子文件夹。在我的测试环境中(安装与生产相同)它运行了超过1000个tif文件的测试基础而没有一个错误。 在我们将其提升到生产环境之后,我们开始遇到脚本崩溃,其中以下代码将创建没有扩展名的文件而不是创建文件夹,然后将无法再处理文件。

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

我还有其他几个地方使用New-Item<> -ItemType目录命令,这些命令在99%的时间内工作,但有时他们也会创建一个文件而不是文件夹。

此脚本按计划每五分钟运行一次,因此每天大约需要4-5次,我们必须先删除它创建的文件,然后才能再次成功完成脚本。

我在文件名中也有大量的括号问题,并且在脚本输出错误时会发出powershell错误,但我的理解是没有已知的修复方法。理想情况下,我喜欢用另一种不那么挑剔的语言重新编程这个脚本,但没有时间带宽。

我的所有系统都安装了Powershell 2.0。

3 个答案:

答案 0 :(得分: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
  }

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

感谢大家的答案!