我们有多个sql文件的文件夹。如何捕获特定文件的错误并将其记录到该文件名。
我们正在使用以下脚本来执行sqlcmd。
$ServerName=$args[0]
$DatabaseName=$args[1]
$UserName=$args[2]
$Passcode=$args[3]
$FolderPath=$args[4]
$errorpath=$args[5]
foreach ($f in Get-ChildItem -path $FolderPath -Filter *.sql | sort-object) {
$fileCurrent = $f.fullname
try {
invoke-sqlcmd -ServerInstance $ServerName -Database $DatabaseName -U $UserName -P $Passcode -InputFile $f.fullname
}
catch {
$_ | Out-File $errorpath -Append
}
}
我们在该文件夹中有100个文件,并且有两个文件错误输出我们要记录错误和文件名。
答案 0 :(得分:0)
try {
...
} catch {
"{0}: {1}" -f ($fileCurrent, $_) | Out-File $errorpath -Append
}
答案 1 :(得分:0)
如果您没有遇到catch块,那是因为您遇到了“非终止”错误。非终止错误不会触发catch块。
要强制您的错误终止,您可以将-ErrorAction 1
传递给Invoke-SQLCmd
,也可以在循环之前设置$errorActionPreference = 'Stop'
。
通过此更改,现在应在Invoke-SQLCmd
失败时触发您的catch块。