繁体   English   中英

如何使用PowerShell扫描SQL Server错误日志(并忽略某些错误)?

[英]How to scan SQL Server error log (and ignore some errors) with PowerShell?

我需要一个PowerShell脚本(兼容2.0)来扫描SQL Server 2008 R2和更高版本的错误日志。 我需要一个短语列表进行搜索,并且要排除一个短语列表。

param ([String]$instanceName=$(throw "Instance name was not supplied"))

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')|Out-Null;
$sqlServer = new-object ("Microsoft.SqlServer.Management.Smo.Server") $instanceName;
$r = $sqlServer.ReadErrorLog();

$find = "Error:","Failed";
$exclude = "Error: 0x2098";

# need to do something with $r here and involve $find and $exclude

因此,例如,我想在ERRORLOG中查找包含Error:Failed所有行,但要排除$exclude数组中的行。 有任何想法吗?

您可以在此处找到很多信息: 使用PowerShell解析SQL Server 2012错误日志

但是执行您要问的一种方法是在设置$ r时过滤结果

$r = $sqlServer.ReadErrorLog()  | ? { $_.Text -match 'error' -OR $_.text -match 'Failed' -and $_text -notmatch "Error: 0x2098"}

您可以遍历每个列表并相应地更新$ r,如下所示将使您入门。

Foreach($ExcludeText in $exclude){
    $r = $r | ? {$_.text -notmatch $ExcludeText}
}

Foreach($IncludeText in $find){
   $r = $r | ?{$_.text -match $IncludeText}
}

上面的文章详细介绍了未公开的TSQL版本。

http://www.mssqltips.com/sqlservertip/1476/reading-the-sql-server-log-files-using-tsql/

我认为您缺少一些参数。 xp_readerrorlog扩展过程采用以下参数。

A-错误日志文件数

B-1 = SQL Server日志,2-SQL Agent日志

C-搜索字符串1

D-搜索字符串2

这是您所要求的Powershell解决方案。

我认为and和or的顺序很重要?

$srv = new-Object Microsoft.SqlServer.Management.Smo.Server("(local)")

$d = $srv.ReadErrorLog(0)
foreach ($r in $d.Rows)
{
   if ( ($r['Text'] -match 'Error:' -and $r['Text'] -notmatch 'Error: 0x2098') 
         -or $r['Text'] -match 'Failed:' )
   {

     Write-Host "============================================"
     Foreach ($c in $d.Columns)
     { Write-Host $c.ColumnName "=" $r[$c]}
   }
}

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM