我有一个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 .
3 回答
我建议如下 . 希望在$ processDir周围加上引号将修复错误,但调试信息可能会有所帮助 .
不确定我的理解是否正确:脚本在客户端上运行 . 客户端运行脚本并在服务器上执行所有文件/文件夹处理(因为我看到你刚刚提到“服务器名称”) . 因此,尽管您有多个(或许多)客户端运行此脚本,但文件/文件夹处理的位置仍在一台服务器上 .
如果答案是"yes",那么您可能想在遇到问题的服务器上尝试
chkdsk [hard drive letter] /f
. 由于它是一台服务器,因此尽管chkdsk /f
是安全的,但确保您拥有该卷数据的良好备份副本 - 它会检查并修复磁盘上的不一致性 .这个答案基于这篇文章:http://answers.yahoo.com/question/index?qid=20070519001528AApeRx6
因此,在经过大量的系统故障排除和错误搜索之后,我发现了什么导致了这个问题 . 我碰巧在恰当的时间看着正确的文件,看到发生了什么 . 还有另一个脚本在我们移动文件的目录上运行,它们将我们正在复制的文件提供给另一个要处理的软件产品 . 发生的事情是第二个脚本是删除文件夹,而Powershell正在将文件移入其中,由于某种原因,Powershell创建了垃圾文件(Leaf) . 解决了这个问题,让我的东西被处理成另一个文件,然后批量移动到第二个文件夹 .
谢谢大家的答案!