我有一个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。
答案 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)。 解决了这个问题,让我的东西被处理成另一个文件,然后批量移动到第二个文件夹。
感谢大家的答案!