Powershell:使用多个文件进行sqlcmd错误处理

时间:2012-09-24 23:58:18

标签: powershell sqlcmd

我们有多个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个文件,并且有两个文件错误输出我们要记录错误和文件名。

2 个答案:

答案 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块。

相关问题