0

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

4

2 回答 2

0
try {
  ...
} catch {
  "{0}: {1}" -f ($fileCurrent, $_) | Out-File $errorpath -Append
}
于 2012-09-25T00:08:36.347 回答
0

如果您没有点击 catch 块,那是因为您遇到了“非终止”错误。非终止错误不会触发 catch 块。

要强制您的错误终止,您可以传递-ErrorAction 1Invoke-SQLCmd循环之前或之前, set $errorActionPreference = 'Stop'

通过此更改,您的 catch 块现在应该在Invoke-SQLCmd失败时触发。

于 2012-09-25T16:37:40.340 回答