如何从 PowerShell Invoke-Sqlcmd 本地记录输出?
我正在使用 Invoke-Sqlcmd 循环遍历一组大型(50,000-90,000 个 SQL 文件,每个文件中有 1-10 个插入)小 SQL 插入语句集。大多数插入语句运行正确,但一些字符串太长,我得到“字符串或二进制数据将被截断”错误。
现在我正在使用 Start-Transcript 来捕获输出并识别有问题的插入语句,但 Start-Transcript 会捕获所有内容。我只想捕捉错误 - 或者 - 只捕捉 Invoke_Sqlcmd 语句输出。
如果这行得通(我相信它应该),我会准备好的:
Invoke-Sqlcmd -InputFile $sql -ServerInstance LocalHost -Database Test_DB -Credential $pwd -Verbose -OutputSqlErrors $true | Out-File -FilePath "C:\Temp\Errorlog.txt" -Append
或者,如果这有效:
Invoke-Sqlcmd -InputFile $sql -ServerInstance LocalHost -Database Test_DB -Credential $pwd -Verbose -OutputSqlErrors $true | Tee-Object -FilePath "C:\Temp\Errorlog.txt" -Append
但这些都不起作用。
我也尝试过这个怪物,但我根本没有得到任何错误:
$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
}
}
如何直接从 Invoke-Sqlcmd 语句记录?