Não muito diferente do artigo original com .NET, com PowerShell também conseguimos criar um script simples para gerar um arquivo de trace de uma determinada instancia do SQL Server.
# Referências
[void][system.reflection.assembly]::loadfrom("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.ConnectionInfo.dll")
[void][system.reflection.assembly]::loadfrom("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.ConnectionInfoExtended.dll")
function Get-Date2(){
[System.DateTime]::UtcNow
}
$template = "C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Profiler\Templates\Microsoft SQL Server\100\Tuning.tdf"
$date = Get-Date
$file = "C:\Temp\Trace$($date.Year)-$($date.Month)-$($date.Day) $($date.Hour)-$($date.Minute)-$($date.Second).trc"
$conn = new-object Microsoft.SqlServer.Management.Common.SqlConnectionInfo
$conn.ServerName = "Dalilah"
$traceReader = new-object Microsoft.SqlServer.Management.Trace.TraceServer
$traceReader.InitializeAsReader($conn, $template)
$traceFile = new-object Microsoft.SqlServer.Management.Trace.TraceFile
$traceFile.InitializeAsWriter($traceReader, $file)
$timeout = (Get-Date2).AddSeconds(30)
while ($traceFile.Write() -eq $TRUE -and $timeout -gt (Get-Date2)) { }
$traceFile.Close()
$traceReader.Close()
E o resultado:














