2012-09-24 2 views
0

У нас есть папка с несколькими sql-файлами. Как поймать ошибку с конкретным файлом и зарегистрировать это имя файла.Powershell: обработка ошибок sqlcmd с несколькими файлами

Мы используем следующий скрипт для выполнения 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 файлов в этой папке и два файла erroring, что мы хотим, чтобы войти ошибка и имя файла.

ответ

0

Если вы не попали в блокирующий блок, это происходит из-за того, что вы сталкиваетесь с ошибкой, «не заканчивающейся». Ошибки без прерывания не вызывают блоки блокировки.

Чтобы принудительно завершить свою ошибку, вы можете либо пройти -ErrorAction 1 до Invoke-SQLCmd, либо перед циклом установить $errorActionPreference = 'Stop'.

С этим изменением ваш блокирующий блок теперь должен запускаться, когда Invoke-SQLCmd не работает.

+0

Я благодарю человека после добавления $ errorActionPreference = «Остановить» теперь его приближение к блоку catch –

0
try { 
    ... 
} catch { 
    "{0}: {1}" -f ($fileCurrent, $_) | Out-File $errorpath -Append 
} 
+0

Мы получаем ошибку, как это, но здесь нет пути к файлу и его не регистрируется в $ errorpath слишком Invoke-Sqlcmd: Неверный синтаксис рядом с ключевым словом «ПРОЦЕДУРА». Оператор RETURN с возвращаемым значением не может использоваться в этом контексте. C: \ psscripts \ ip.ps1: 15 char: 22 + invoke-sqlcmd <<<< -ServerInstance $ Имя_сервера-База данных $ DatabaseName -U $ UserName -P $ Passcode -InputFile $ f.fullname + CategoryInfo: InvalidOperation: (:) [Invoke-SqlError, Microsoft.SqlServer.Management.PowerShell.GetScriptCommand –

+0

Еще одна вещь, которую он даже не собирается блокировать при отладке –

+0

Есть ли сценарий продолжать, несмотря на ошибку? Если это так, попробуйте установить '$ ErrorActionPreference =" Стоп "'. –