ESTE SCRIPT EM PARTICULAR USA OUTRO TXT DE SERVIDORES, POIS NESTE NÃO PASSAMOS AS INSTÂNCIAS E SIM SOMENTE O SERVIDOR. EU O CHAMEI DE SERVIDORESDEFAULT.TXT e fica
SERVER1
SERVER2
SERVER3
Os dois primeiros são 2008 e o terceiro 2005
Eu o gravo numa pasta chamada c:\dadosps, vocês irão ver esta chamada em todos os scripts
Este script varre o evetlog (application) de todos os servidores, procura por type "error|erro|warning" quando tiver "*SQL*" no source e 1 dia anterior a data de hoje. Joga pra um XML e grava numa tabela SQL SERVER com datatype XML.
Criar a Tabela no SQL SERVER
Create table Diario.tb_Eventlog(servidor varchar(50),Data datetime,valores XML)
Script PS
$ServidorCentral = "SERVER1\MSSQLSERVER_1"
$DatabaseCentral = "DBA"
$sql = "truncate table Diario.Eventlog"
Invoke-Sqlcmd -ServerInstance $ServidorCentral -Database $DatabaseCentral -Query $sql
$Datas=(get-date).adddays(- 1).ToUniversalTime().ToShortDateString()
$Datahoje = (get-date).ToShortDateString()
foreach ($svr in get-content "C:\dadosps\servidoresdefault.txt" )
{
$Evtlog = ""
$Evtlog = new-Object System.Diagnostics.Eventlog("application",$svr)
$Evtlog.Entries | where-object {$_.entrytype -match "(Warning|Error|Erro)" -and $_.source -like "*SQL*" -and $_.timegenerated.ToUniversalTime().ToShortDateString() -eq $Datas } | export-clixml "c:\dadosps\Eventlog.xml"
$valores = Get-Content "c:\dadosps\Eventlog.xml"
$valores = $valores -replace "'", "''"
$sql = "set dateformat dmy insert into diario.eventlog (servidor,data,valores) values ('$svr','$DataHoje','$valores')"
Invoke-Sqlcmd -ServerInstance $ServidorCentral -Database $DatabaseCentral -Query $sql
del c:\dadosps\Eventlog.xml
}
{
$Evtlog = new-Object System.Diagnostics.Eventlog("application",$servidor)
$Evtlog.Entries | where-object {$_.entrytype -match "(Warning|Error|Erro)" -and $_.source -like $Source -and $_.timegenerated.ToUniversalTime().ToShortDateString() -eq $Datas } | select-object TimeGenerated,Category,Eventid,Message,source,entrytype | export-clixml "c:\dadosps\Eventlog.xml"
$Retorno = $valores -replace "'", "''"
del c:\dadosps\Eventlog.xml
Return $Retorno
$xml
No meu primeiro Artigo eu mostro como rodar os scripts
PowerShell e o dia a dia do DBA SQL SERVER - INTRODUÇÃO e checando a conectividade de linked servers
Laerte Poltronieri Junior
PowerShell no Dia a Dia do DBA
http://laertejuniordba.spaces.live.com