У меня был следующий код в сценарии PowerShell:
$sql_instance = "SQLEXPRESS"
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')
$server = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $sql_instance
Write-Host $server.InstanceName
И ничего не вернули. Примерно через 20 минут исследования я понял, что забыл указать имя компьютера при создании объекта $ server.
Код должен был быть:
$sql_instance = "MYSERVER\SQLEXPRESS"
У меня вопрос: как я могу убедиться, что созданный объект сервера действительно представляет действительный экземпляр SQL Server?
Я представляю себе что-то вроде: If $server.IsNotValid -eq "True" Then Throw Exception
$server.ConnectionContext.Connect()
приведет к ошибке, если вы не сможете подключиться к серверу.
Насколько я знаю, вы не можете проверить соединение с SQL-сервером, пока не попытаетесь получить свойство (или явно не установите соединение с сервером). $conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection
Я не могу проверить это прямо сейчас, но я считаю, что вы получите сообщение об ошибке, если вызов соединения не удастся. Если нет, вы должны, если попытаетесь получить какое-либо свойство.