[英]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.