2017-05-31 53 views
1

我想提取特定文本文件中有错误的计算机的列表。我做了以下内容:Powershell从不同计算机上的文本文件中提取错误

$computernames = Get-Content C:\PC.txt 
foreach ($server in $computernames) 
{ 
    $filepath = Test-Path "\\$server\c$\" 


    if ($filepath -eq "True") { 

     Get-Content "\\$server\c$\file.log" | Select-String "Error" -quiet | Select-Object $server 
    } 
} 

即返回我的第一台使用了一个错误,那么只有一些空行,在命令窗口。

如果我试图将它与文件或解压缩或其他任何文件,我有一个空白文件。

在此事先感谢您的任何线索。

问候。

+0

*期望的结果是什么?你对错误信息感兴趣吗?或者只是计算机名称? – vonPryz

+0

目前只有电脑的名字。解释整个事情。 此日志文件与服务相关,只能生成2个错误,这些错误可以通过修复或通过重新启动第一种情况的服务,或通过删除第二种情况的数据库中的重复项来实现。 目前的想法是让计算机出现错误,然后尝试改进以自动执行解决方案,因此如果错误500 - >重新启动服务,如果ducplicate提取GUID并从数据库中删除。 但我正在一点一点的采取:) – Blodka

回答

0

你可以用这个做很多事情。让我先告诉你你在找什么:

因此,让我们说你有一个错误,为了捕捉你应该使用try/catch。

更换

Get-Content "\\$server\c$\file.log" | Select-String "Error" -quiet | Select-Object $server 

随着这

 try 
     { 
     Get-Content "\\$server\c$\file.log" | Select-String "Error" -quiet | Select-Object $server 
     } 
     catch 
     { 
     $Error >> ErrorFile.txt 
     } 

第二件事,我建议是。假设你有10台电脑,并假设第8台电脑有一些错误。但是你仍然不希望停止循环,并继续循环的其余计算机。在这种情况下,你应该使用2 try/catch语句是这样的:

$computernames = Get-Content C:\PC.txt 
try 
{ 
    foreach ($server in $computernames) 
    { 
     $filepath = Test-Path "\\$server\c$\" 
     try{ 

      if ($filepath -eq "True") { 
       try 
       { 
       Get-Content "\\$server\c$\file.log" | Select-String "Error" -quiet | Select-Object $server 
       } 
       catch 
       { 
       $Error >> ErrorFile.txt 
       } 
      } 
     } 
     catch 
     { 
     $_.Exception.Message >> Errorfile.txt 
     } 
    } 
} 
catch 
{ 
$_.Exception.Message >> Errorfile.txt 
} 

所以方法是,如果在foreach内的任何错误,那么内部catch块将捕捉它和错误信息会被解析到errorfile.txt保持循环运行并将继续处理其余的计算机。

如果有一些问题与主$ computernames同时获得该文件的内容,那么它会到主catch块与分析,并附加在errorfile.txt

希望它相应的错误信息帮助您了解try/catch的有效性

+0

这不是我如何理解这个问题。有日志文件包含一些错误消息,问题是如何搜索文件。 – vonPryz

+0

我现在正在测试,它或多或少的200台计算机,所以是我有足够的:),这个想法是搜索错误的日志文件,并获取错误的计算机的名称。 – Blodka

+0

我以为他想捕捉循环中的错误 –

相关问题