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

Powershell:使用多个文件处理sqlcmd错误,powershell,sqlcmd,Powershell,Sqlcmd,我们有一个包含多个sql文件的文件夹。如何捕获特定文件的错误并将其记录到该文件名中 try { ... } catch { "{0}: {1}" -f ($fileCurrent, $_) | Out-File $errorpath -Append } 我们使用以下脚本来执行sqlcmd $ServerName=$args[0] $DatabaseName=$args[1] $UserName=$args[2] $Passcode=$args[3] $FolderPath=$args[

我们有一个包含多个sql文件的文件夹。如何捕获特定文件的错误并将其记录到该文件名中

try {
  ...
} catch {
  "{0}: {1}" -f ($fileCurrent, $_) | Out-File $errorpath -Append
}
我们使用以下脚本来执行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个文件,有两个文件出错。我们要记录错误和文件名

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

try {
  ...
} catch {
  "{0}: {1}" -f ($fileCurrent, $_) | Out-File $errorpath -Append
}
要强制终止错误,可以将
-ErrorAction 1
传递到
调用SQLCmd
,或者在循环之前,设置
$errorActionPreference='Stop'


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

我们得到这样的错误,但这里没有文件路径,并且它也没有记录到$errorpath Invoke SQLCmd:关键字“PROCEDURE”附近的语法不正确。在此上下文中不能使用带有返回值的RETURN语句。在C:\PSScript\ip.ps1:15 char:22+调用sqlcmd时,还有一件事它甚至不会在调试时捕获块脚本会继续吗?如果是这样,请尝试设置
$ErrorActionPreference=“Stop”
。它将继续。添加此$ErrorActionPreference=“Stop”后,我们需要该选项是的。添加$ErrorActionPreference=“Stop”后,将出现“捕获块感谢”添加$ErrorActionPreference=“停止”后的感谢人现在是“捕获块”