我们有一个脚本每天在两个独立的服务器上运行,这两个脚本的副本全年都没有更改。上周末,服务器宕机中断了其中一台服务器上运行的脚本,从那以后,该服务器上的脚本每天都会出现部分故障。
这是继续失败的代码,我已经把它拆分出来,并在本地运行,没有问题。
$rawlineCountFile ="C:\temp\files\test\linecount"
$rawlineCountFile = $rawlineCountFile +'RawlineCount' + 'test' + '.csv'
$filePath = "C:\temp\files\test"
# do line count in files
$bak = Get-ChildItem $filePath  | Where-Object { $_.Extension -eq ".dat" } 
Try 
{ 
Write-Output  "line_count , file_name"
foreach ($file in $bak) { 
               $name = $file.name 
               $measure =(Get-Content $filePath\$file | Measure-Object)              
               $lines = $measure.Count                   
               Write-Output  "$lines , $name"  
               Write-Output "$lines , $name" >> $rawlineCountFile
                } 
} catch [Exception] {
  Write-Output $_.Exception.GetType().FullName
  Write-Output $_.Exception.Message 
    }上面的脚本查看一个包含.dat文件的文件夹,对于每个文件,它将每个文件中的$lines ($measure.count)和$file.name写入到rawlinecountfile.csv中。
即
123,file1.dat
234,file2.dat
987,file3.dat
567,file4.dat
等等等等。
每天有7个文件移动到这个文件夹中,然后这个脚本运行,所以每天应该有7行添加到rawlinecountfile中,然后,在其余的过程完成后,所有的文件都会被清除,为第二天做准备。
然而,自从上周宕机以来,它每天只将7行中的0-2行写入csv文件,而不是针对每个文件(仍为7行)。
我们感到困惑的是,为什么For Each似乎不再工作,而脚本没有改变,相同的脚本仍然在姊妹服务器和我的本地计算机上按预期运行。
有什么想法吗?
发布于 2017-12-12 03:48:01
当您调用Get-Content时,我相信您正在尝试从C:\Temp\Files\Test\C:\Temp\Files\Test\Filename.dat获取文件。您可以使用$file.FullName获取完整路径。我怀疑它可能抛出了一个错误,没有将内容添加到文件中。这在PS 5.1中起作用。
$rawlineCountFile ="C:\temp\files\test\linecount"
$rawlineCountFile = $rawlineCountFile +'RawlineCount' + 'test' + '.csv'
$filePath = "C:\temp\files\test"
# do line count in files
$bak = Get-ChildItem $filePath | Where-Object { $_.Extension -eq ".dat" } 
Try 
{ 
    Write-Output  "line_count , file_name"
    foreach ($file in $bak)
    { 
        $name = $file.name 
        $lines = @(Get-Content -Path $File.FullName).Count                  
        Write-Output "$lines , $name"  
        "$lines , $name" | Add-Content $rawlineCountFile
    } 
}
catch [Exception]
{
    Write-Output $_.Exception.GetType().FullName
    Write-Output $_.Exception.Message 
}只替换我提到的可能会有问题的那一行:
$rawlineCountFile ="C:\temp\files\test\linecount"
$rawlineCountFile = $rawlineCountFile +'RawlineCount' + 'test' + '.csv'
$filePath = "C:\temp\files\test"
# do line count in files
$bak = Get-ChildItem $filePath  | Where-Object { $_.Extension -eq ".dat" } 
Try 
{ 
Write-Output  "line_count , file_name"
foreach ($file in $bak) { 
               $name = $file.name 
               $measure =(Get-Content $file.FullName | Measure-Object)              
               $lines = $measure.Count                   
               Write-Output  "$lines , $name"  
               Write-Output "$lines , $name" >> $rawlineCountFile
                } 
} catch [Exception] {
  Write-Output $_.Exception.GetType().FullName
  Write-Output $_.Exception.Message 
    }https://stackoverflow.com/questions/47759651
复制相似问题