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 個のファイルがあり、2 つのファイルでエラーが発生しています。エラーとファイル名をログに記録します。

4

2 に答える 2

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

catch ブロックにヒットしていない場合は、「非終了」エラーが発生しているためです。非終了エラーは catch ブロックをトリガーしません。

エラーを強制的に終了させるには、ループに渡すか、ループの前に set-ErrorAction 1を渡すことができます。Invoke-SQLCmd$errorActionPreference = 'Stop'

この変更により、Invoke-SQLCmd失敗したときに catch ブロックがトリガーされるようになりました。

于 2012-09-25T16:37:40.340 に答える