Подтвердить что ты не робот

Подключение тестовой базы данных

Есть ли простой способ проверить подключение к экземпляру MS SQL Server от клиента (без загрузки каких-либо сборок SQL) с помощью PowerShell?

MS Sql: Имя сервера\Экземплярный порт 1433

Как проверить подключение к серверу с помощью PowerShell от обычного клиента?

4b9b3361

Ответ 1

Используйте SqlConnection класс для проверки соединения. Вам не нужно загружать сборки SQL.

Функция помощника:

function Test-SQLConnection
{    
    [OutputType([bool])]
    Param
    (
        [Parameter(Mandatory=$true,
                    ValueFromPipelineByPropertyName=$true,
                    Position=0)]
        $ConnectionString
    )
    try
    {
        $sqlConnection = New-Object System.Data.SqlClient.SqlConnection $ConnectionString;
        $sqlConnection.Open();
        $sqlConnection.Close();

        return $true;
    }
    catch
    {
        return $false;
    }
}

Пример использования:

Test-SQLConnection "Data Source=localhost;database=myDB;User ID=myUser;Password=myPassword;"

Ответ 2

Это в основном то же самое, что и ответ Мартина, из параметров настраивается только строка соединения, и измеряется время, затраченное на соединение.

например:

Test-SQLDatabase -Server SQLServer -Database SomeDB -Username SQLUser -Password password

или

Test-SQLDatabase -Server Server1\SQLExpress -Database SomeDB -UseWindowsAuthentication

.

function Test-SQLDatabase 
{
    param( 
    [Parameter(Position=0, Mandatory=$True, ValueFromPipeline=$True)] [string] $Server,
    [Parameter(Position=1, Mandatory=$True)] [string] $Database,
    [Parameter(Position=2, Mandatory=$True, ParameterSetName="SQLAuth")] [string] $Username,
    [Parameter(Position=3, Mandatory=$True, ParameterSetName="SQLAuth")] [string] $Password,
    [Parameter(Position=2, Mandatory=$True, ParameterSetName="WindowsAuth")] [switch] $UseWindowsAuthentication
    )

    # connect to the database, then immediatly close the connection. If an exception occurrs it indicates the conneciton was not successful. 
    process { 
        $dbConnection = New-Object System.Data.SqlClient.SqlConnection
        if (!$UseWindowsAuthentication) {
            $dbConnection.ConnectionString = "Data Source=$Server; uid=$Username; pwd=$Password; Database=$Database;Integrated Security=False"
            $authentication = "SQL ($Username)"
        }
        else {
            $dbConnection.ConnectionString = "Data Source=$Server; Database=$Database;Integrated Security=True;"
            $authentication = "Windows ($env:USERNAME)"
        }
        try {
            $connectionTime = measure-command {$dbConnection.Open()}
            $Result = @{
                Connection = "Successful"
                ElapsedTime = $connectionTime.TotalSeconds
                Server = $Server
                Database = $Database
                User = $authentication}
        }
        # exceptions will be raised if the database connection failed.
        catch {
                $Result = @{
                Connection = "Failed"
                ElapsedTime = $connectionTime.TotalSeconds
                Server = $Server
                Database = $Database
                User = $authentication}
        }
        Finally{
            # close the database connection
            $dbConnection.Close()
            #return the results as an object
            $outputObject = New-Object -Property $Result -TypeName psobject
            write-output $outputObject 
        }
    }
}

Ответ 3

Это зависит от того, что вы на самом деле хотите проверить. Если вы просто хотите проверить, что вы можете подключиться к порту на удаленном хосте, что-то вроде этого:

$server = 'servername'
$port   = 1433

$tcp = New-Object Net.Sockets.TcpClient
if ([void]$tcp.Connect($server, $port)) {
  'connected'
} else {
  'not connected'
}
$tcp.Dispose()

Если вы хотите проверить, что соединение с экземпляром SQL Server может быть установлено, вам понадобится что-то вроде этого:

$dbhost = 'servername'
$dbinst = 'instance'
$dbname = 'master'

$username = ...
$password = ...

$cs = "Server=$dbhost\$dbinst;Database=$dbname;User Id=$username;" +
      "Password=$password;"

$cn = New-Object -COM 'ADODB.Connection'
$cn.ConnectionString = $cs
try {
  $cn.Open()
  if ($cn.State -eq 1) {
    'connected'
    $cn.Close()
  } else {
    'not connected'
  }
} catch {
  'not connected'
}