首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Powershell脚本突然失败

Powershell脚本突然失败
EN

Stack Overflow用户
提问于 2017-12-12 03:03:54
回答 1查看 46关注 0票数 0

我们有一个脚本每天在两个独立的服务器上运行,这两个脚本的副本全年都没有更改。上周末,服务器宕机中断了其中一台服务器上运行的脚本,从那以后,该服务器上的脚本每天都会出现部分故障。

这是继续失败的代码,我已经把它拆分出来,并在本地运行,没有问题。

代码语言:javascript
运行
复制
$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似乎不再工作,而脚本没有改变,相同的脚本仍然在姊妹服务器和我的本地计算机上按预期运行。

有什么想法吗?

EN

Stack Overflow用户

发布于 2017-12-12 03:48:01

当您调用Get-Content时,我相信您正在尝试从C:\Temp\Files\Test\C:\Temp\Files\Test\Filename.dat获取文件。您可以使用$file.FullName获取完整路径。我怀疑它可能抛出了一个错误,没有将内容添加到文件中。这在PS 5.1中起作用。

代码语言:javascript
运行
复制
$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 
}

只替换我提到的可能会有问题的那一行:

代码语言:javascript
运行
复制
$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 

    }
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47759651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档