Usando a classe QueryTableXEventData no Powershell, sou capaz de analisar centenas de arquivos XEL muito rapidamente e exportar seu conteúdo para uma tabela no SQL Server usando SQLBulkCopy
Exemplo:
$events = new-object Microsoft.SqlServer.XEvent.Linq.QueryableXEventData
("\\some_file_path\XELog_Files*.xel")
Eu não vejo uma propriedade File no array $fields.
$event | Select-Object -ExpandProperty Fields
is_cached System.Boolean True
is_recovered System.Boolean False
is_dac System.Boolean False
database_id System.UInt32 73
packet_size System.UInt32 8000
options System.Byte[] {32, 0, 0, 40...}
options_text System.String
database_name System.String
Ou em $eventos
Name : login
UUID : 13e22e12-3cb8-49bf-a3e1-131faa95601c
Package : Microsoft.SqlServer.XEvent.Linq.Internal.XEventInteropPackage
Metadata : Microsoft.SqlServer.XEvent.Linq.Internal.XEventInteropEventMetadata
Timestamp : 18/08/2020 03:41:37 +00:00
Fields : {is_cached, is_recovered, is_dac, database_id...}
Actions : {server_instance_name, database_name, database_id, client_hostname...}
Location : Microsoft.SqlServer.XEvent.Linq.EventLocator
Existe uma propriedade que eu possa usar em SQLBulkCopy ou QueryTableXEventData que tenha o nome do arquivo que está sendo lido ou exportado?
Não acredito que o nome do arquivo seja exposto por meio de uma propriedade.
Em vez de passar um caminho curinga para o
QueryableXEventData
construtor, você pode obter uma lista dos arquivos e processar cada um individualmente: