Powershell从不同计算机上的文本文件中提取错误

时间:2017-05-31 08:55:42

标签: 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 
    } 
}

那是第一台带有错误的计算机,然后是命令窗口中只有一些空行。

如果我尝试在带有out-file或extract等的文件中获取它,我有一个空白文件。

提前感谢您对此事的任何线索。

问候。

1 个答案:

答案 0 :(得分: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次尝试/捕获:

$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的有效性