如何使用PowerShell验证SQL Server实例是否正确?

时间:2012-07-18 11:37:32

标签: sql-server powershell powershell-v2.0

我们使用Invoke-sqlcmd cmdlet使用powershell执行SQL查询。

如果SQl服务器实例被指定为错误则抛出异常。

虽然我已经在try catch中捕获了错误,但仍然在控制台中抛出异常

  

“Invoke-Sqlcmd:发生与网络相关或特定于实例的错误   同时建立与SQL Server的连接“

            try {
            $Qresult= Invoke-sqlcmd -query $SelectQuery -ServerInstance $srvInstance
            $Qresult = $Qresult| % { $_.$columnName+"`n" }
            LogWrite "$Qresult`n"
        }
        catch {
            Write-error "Error occured when executing sql $SelectQuery"
            LogWrite $Error[0]
        }

如何验证SQL Server实例是否可用并且在执行任何查询之前它是否正在运行?

3 个答案:

答案 0 :(得分:5)

function SQL-Ping-Instance 
{
    param (
        [parameter(Mandatory = $true)][string] $ServerInstance,
        [parameter(Mandatory = $false)][int] $TimeOut = 1
    )

    $PingResult = $false

    try
    {
        $SqlCatalog = "master"
        $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
        $SqlConnection.ConnectionString = "Server = $ServerInstance; Database = $SqlCatalog; Integrated Security = True; Connection Timeout=$TimeOut"
        $SqlConnection.Open() 
        $PingResult = $SqlConnection.State -eq "Open"
    }

    catch
    {
    }

    finally
    {
        $SqlConnection.Close()
    }

    return $pingResult
}

if (SQL-Ping-Instance $srvInstance)
{
    $Qresult= Invoke-sqlcmd -query $SelectQuery -ServerInstance $srvInstance
    $Qresult = $Qresult| % { $_.$columnName+"`n" }
    LogWrite "$Qresult`n"
}
else
{
    LogWrite "Couldn't contact $srvInstance"
}

答案 1 :(得分:1)

使用try / catch无法捕获非终止错误。为了使错误成为终止错误,请将ErrorAction值设置为“Stop”。如果没有帮助,请尝试添加-AbortOnError开关

try
{
   Invoke-sqlcmd -query... -ErrorAction Stop
}
catch
{
   $_
}

答案 2 :(得分:0)

使用powershell tr​​y / catch块来捕获任何错误 - $ _将包含完整的错误描述

cls
try
{
invoke-sqlcmd stuff here
}
catch
{
$_
}

您也可以ping服务器但尝试执行命令将测试服务器,测试实例,并测试数据库同时运行查询,并且您的try / catch块将在以下处理问题每个阶段。