我试图从Power
Shell运行存储在文本文件中的查询.我使用以下来做到这一点;
Invoke-Expression 'sqlcmd -d TestDB -U $user -P $pw -i "E:\sqlQuery1.sql"'
如果从.sql文件执行查询时发生错误或异常,我如何在我的Powershell脚本中捕获它?如何获取脚本输出?
注意:我不能使用invoke-sqlcmd
解决方法
回答这个问题
If some error or exception occurred when executing .sql file how can I get that into my PowerShell script? How can I get the script output?”
Invoke-Expression返回已执行表达式的输出.但是,它可能只捕获STDOUT,而不是STDERR(我没有测试过,因为我没有使用此方法),因此您可能无法获得实际的错误消息.
来自帮助:
The Invoke-Expression cmdlet evaluates or runs a specified string as a command and returns the results of the expression or command
更好的方法是使用已有的PowerShell方法 – 如果安装了任何sql Server 2008(或更新版本)组件/工具(如SSMS),则会安装Invoke-sqlCmd.如果你有sql Server 2012,那很简单:import-module sqlps.对于2008,您需要添加Snap-In,add-pssnapin sqlServerCmdletSnapin.由于您有sqlcmd.exe,PowerShell组件应该已经存在.
如果所有其他方法都失败了,请转到System.Data.sqlClient路由:
$Conn=New-Object System.Data.sqlClient.sqlConnection "Server=YOURSERVER;Database=TestDB;User Id=$user;password=$pw"; $Conn.Open(); $DataCmd = New-Object System.Data.sqlClient.sqlCommand; $MyQuery = get-content "e:\sqlQuery1.sql"; $DataCmd.CommandText = $MyQuery; $DataCmd.Connection = $Conn; $DAadapter = New-Object System.Data.sqlClient.sqlDataAdapter; $DAadapter.SelectCommand = $DataCmd; $DTable = New-Object System.Data.DataTable; $DAadapter.Fill($DTable)|Out-Null; $Conn.Close(); $Conn.Dispose(); $DTable;