Como faço para registrar nativamente a saída do PowerShell Invoke-Sqlcmd?
Estou usando Invoke-Sqlcmd para percorrer um grande conjunto (50.000-90.000 arquivos SQL com 1-10 inserções em cada) de pequenas instruções de inserção SQL. A maioria das instruções de inserção são executadas corretamente, mas algumas das strings são muito longas e recebo o erro "string ou dados binários seriam truncados".
No momento, estou usando o Start-Transcript para capturar a saída e identificar as instruções de inserção problemáticas, mas o Start-Transcript captura tudo. Eu gostaria de pegar apenas os erros - ou - apenas pegar a saída da instrução Invoke_Sqlcmd.
Se isso funcionasse (como acredito que deveria), eu estaria tudo pronto:
Invoke-Sqlcmd -InputFile $sql -ServerInstance LocalHost -Database Test_DB -Credential $pwd -Verbose -OutputSqlErrors $true | Out-File -FilePath "C:\Temp\Errorlog.txt" -Append
Ou se isso funcionou:
Invoke-Sqlcmd -InputFile $sql -ServerInstance LocalHost -Database Test_DB -Credential $pwd -Verbose -OutputSqlErrors $true | Tee-Object -FilePath "C:\Temp\Errorlog.txt" -Append
Mas nenhum desses funciona.
Eu também tentei essa monstruosidade, mas não recebo nenhum erro:
$sqls = (Get-ChildItem -Path "I:\2019_06_24\_SQL"-Filter *.sql | Sort-Object -Property CreationTime).FullName
foreach ($sql in $sqls)
{
$Error.Clear()
try
{
Invoke-Sqlcmd -InputFile $sql -ServerInstance LocalHost -Database Test_DB -Credential $pwd -Verbose -OutputSqlErrors $true
}
catch
{
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' | Out-File "C:\Temp\Errorlog.txt" -Append
$sql | out-file -filepath "C:\Temp\Errorlog.txt" -Append
$Error | out-file -filepath "C:\Temp\Errorlog.txt" -Append
}
}
Como faço logon diretamente da instrução Invoke-Sqlcmd?