2012-09-24 57 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個文件和兩個文件示數了,我們要記錄錯誤和文件名。

回答

0

如果您沒有碰到catch塊,這是因爲您遇到「非終止」錯誤。非終止錯誤不會觸發catch塊。

要強制您的錯誤終止,您可以將-ErrorAction 1設置爲Invoke-SQLCmd或在循環之前設置爲$errorActionPreference = 'Stop'

隨着這一變化,您的catch塊現在應該當Invoke-SQLCmd失敗觸發。

+0

雅感謝的人 –

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

我們得到錯誤,如這一點,但這裏也沒有文件的路徑和它不記錄到$ errorpath太調用-SQLCMD:關鍵字「過程」附近有語法錯誤。 帶有返回值的return語句不能在此context.At C中使用的:\ psscripts \ ip.ps1:15字符:22 +調用-SQLCMD <<<< -ServerInstance $服務器名稱 - 數據庫$數據庫名-U $用戶名-P $ Passcode -InputFile $ f.fullname + CategoryInfo:InvalidOperation:(:) [Invoke-SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand –

+0

還有一件事是它甚至沒有在調試時趕上阻止 –

+0

腳本繼續儘管錯誤?如果是這樣,請嘗試設置'$ ErrorActionPreference =「Stop」'。 –